Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>As Google Play may return prices in currency format which is unsupported by java.text.NumberFormat, I wrote my own implementation</p> <pre><code>public class Price { private double value; private String currency; private String pattern; private DecimalFormat decimalFormat; private Price() {} private static String currencyToDecimalFormat(String value, Price price) { char decimalSeparator = '.'; char groupingSeparator = 0; if (value.length() &gt;= 3) { char[] chars = value.toCharArray(); if (chars[chars.length - 2] == ',') { decimalSeparator = ','; chars[chars.length - 2] = '.'; } else if (chars[chars.length - 3] == ',') { decimalSeparator = ','; chars[chars.length - 3] = '.'; } value = new String(chars); } if (value.contains(",")) { groupingSeparator = ','; value = value.replaceAll(",", ""); } else if (value.contains(" ")) { groupingSeparator = ' '; value = value.replaceAll(" ", ""); } else if (value.contains("\u00A0")) { groupingSeparator = '\u00A0'; value = value.replaceAll("\u00A0", ""); } DecimalFormatSymbols symbols = new DecimalFormatSymbols(); if (groupingSeparator != 0) { price.decimalFormat = new DecimalFormat("###,###.00"); symbols.setGroupingSeparator(groupingSeparator); } else { price.decimalFormat = new DecimalFormat("######.00"); } symbols.setDecimalSeparator(decimalSeparator); price.decimalFormat.setDecimalFormatSymbols(symbols); return value.replaceAll(",", ""); } public static Price parsePrice(String priceFromGoogle) { Price price = new Price(); StringBuilder patternBuilder = new StringBuilder(); Pattern pattern = Pattern.compile("(?:[0-9]{1,3})(?:[0-9,.\\s\u00A0]+)"); Matcher matcher = pattern.matcher(priceFromGoogle); matcher.find(); String priceString = matcher.group(); if (priceFromGoogle.indexOf(priceString) == 0) { if (priceFromGoogle.length() != priceString.length()) { price.currency = priceFromGoogle.substring(priceString.length()); } else { price.currency = ""; } } else { price.currency = priceFromGoogle.substring(0, priceFromGoogle.indexOf(priceString)); } price.currency = price.currency.trim(); if (priceFromGoogle.startsWith(price.currency)) { patternBuilder.append("%1s"); char nextChar = priceFromGoogle.charAt(price.currency.length()); if (nextChar == ' ' || nextChar == 0xA0) { patternBuilder.append(' '); } patternBuilder.append("%2$s"); } else { patternBuilder.append("%2$s"); char prevChar = priceFromGoogle.charAt(priceFromGoogle.indexOf(price.currency) - 1); if (prevChar == ' ' || prevChar == 0xA0) { patternBuilder.append(' '); } patternBuilder.append("%1s"); } price.pattern = patternBuilder.toString(); priceString = trim(priceString); priceString = currencyToDecimalFormat(priceString, price); price.value = Double.parseDouble(priceString); return price; } @Override public String toString() { if (pattern != null) { return String.format(pattern, currency, decimalFormat.format(value)); } else { return ""; } } </code></pre> <p>}</p> <p><strong>EDIT1:</strong></p> <p>Because of Google uses non-breaking space instead of usual space you need check this and use custom trim function:</p> <pre><code>public static String trim(String text) { int start = 0, last = text.length() - 1; int end = last; while ((start &lt;= end) &amp;&amp; (text.charAt(start) &lt;= ' ' || text.charAt(start) == 0xA0)) { start++; } while ((end &gt;= start) &amp;&amp; (text.charAt(end) &lt;= ' ' || text.charAt(end) == 0xA0)) { end--; } if (start == 0 &amp;&amp; end == last) { return text; } return text.substring(start, end); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload