Почему префиксы и суффиксы определенных форматов валют Java заканчиваются символом, подобным пробелу, а не пробелом?

Я извлекаю все доступные форматы валюты 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 (они все) с positivePrefixEUR однако последний символ - это не пробел, а символ с числовым значением -1, И этот префикс никогда не совпадает EUR (с реальным пространством) в EUR 5 что делает его бесполезным для важного варианта использования.

Я могу обойти эту проблему, создав свой собственный DecimalFormats, однако я хотел бы понять, почему я получаю эти форматы, то есть префиксы в форматах, и есть ли какая-то опция конфигурации, которую я пропускаю, чтобы избежать их (и получить "настоящие" пробелы для форматов с завершающим или начальным пробелом в префиксе или суффиксе).

Я столкнулся с ошибкой?

Я сделал следующую проверку:

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,

я ищу NumberFormats /DecimalFormats с пробелом в префиксе или суффиксе, потому что я работаю с данными OCR, которые вряд ли когда-либо будут иметь защищенное (= неразрывное) пространство.

Я использую OpenJDK 11 в Ubuntu 18.10 с немецким языковым стандартом / языковым пакетом по умолчанию (который не должен иметь никакого влияния на код выше afaik).

0 ответов

Другие вопросы по тегам