我正在检索所有可用的Java货币格式,如下所示:
for(Locale locale : Locale.getAvailableLocales()) {
for(Currency currency : Currency.getAvailableCurrencies()) {
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
numberFormat.setCurrency(currency);
//do something with the format
}
}
当我发现EUR 5
DecimalFormat
是positivePrefix
(全部都是)格式时,我试图解析EUR
这样的字符串,但是最后一个字符不是空格,而是带有数字-1
的字符。而且该前缀永远不会与EUR
中的EUR 5
(具有实际空间)匹配,这对于重要的用例来说毫无用处。
我可以通过创建自己的DecimalFormat
来解决此问题,但是我想了解为什么我要获得这些格式,即格式中的前缀,以及是否有配置选项为了避免它们而丢失了(并为前缀或后缀带有尾随或前导空格的格式获取“真实”空格)。
我遇到错误了吗?
我进行了以下验证:
boolean positivePrefixTrailingSpace = false;
boolean positiveSuffixLeadingSpace = false;
boolean negativePrefixTrailingSpace = false;
boolean negativeSuffixLeadingSpace = false;
for(Locale locale : Locale.getAvailableLocales()) {
for(Currency currency : Currency.getAvailableCurrencies()) {
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
numberFormat.setCurrency(currency);
DecimalFormat numberFormatCast = (DecimalFormat)numberFormat;
if(numberFormatCast.getPositivePrefix().endsWith(" ")
&& numberFormatCast.getPositivePrefix().contains("EUR")) {
positivePrefixTrailingSpace = true;
}
if(numberFormatCast.getPositiveSuffix().startsWith(" ")
&& numberFormatCast.getPositivePrefix().contains("EUR")) {
positiveSuffixLeadingSpace = true;
}
if(numberFormatCast.getNegativePrefix().endsWith(" ")
&& numberFormatCast.getPositivePrefix().contains("EUR")) {
negativePrefixTrailingSpace = true;
}
if(numberFormatCast.getNegativeSuffix().startsWith(" ")
&& numberFormatCast.getPositivePrefix().contains("EUR")) {
negativeSuffixLeadingSpace = true;
}
}
}
其中所有布尔值均为false
。
我正在寻找NumberFormat
/ DecimalFormat
的前缀或后缀带有空格的原因,因为我正在处理几乎没有保护(=断行)的OCR数据)空间。
我正在Ubuntu 18.10上使用OpenJDK 11,并带有德语默认语言环境/语言包(这对afaik上面的代码没有任何影响)。