为什么某些Java货币格式的前缀和后缀以类似空格的字符而不是空格结尾?

时间:2019-01-13 21:27:18

标签: java formatting number-formatting currency-formatting

我正在检索所有可用的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 DecimalFormatpositivePrefix(全部都是)格式时,我试图解析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上面的代码没有任何影响)。

0 个答案:

没有答案