Почему префиксы и суффиксы определенных форматов валют 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
(они все) с positivePrefix
EUR
однако последний символ - это не пробел, а символ с числовым значением -1
, И этот префикс никогда не совпадает EUR
(с реальным пространством) в EUR 5
что делает его бесполезным для важного варианта использования.
Я могу обойти эту проблему, создав свой собственный DecimalFormat
s, однако я хотел бы понять, почему я получаю эти форматы, то есть префиксы в форматах, и есть ли какая-то опция конфигурации, которую я пропускаю, чтобы избежать их (и получить "настоящие" пробелы для форматов с завершающим или начальным пробелом в префиксе или суффиксе).
Я столкнулся с ошибкой?
Я сделал следующую проверку:
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
s /DecimalFormat
s с пробелом в префиксе или суффиксе, потому что я работаю с данными OCR, которые вряд ли когда-либо будут иметь защищенное (= неразрывное) пространство.
Я использую OpenJDK 11 в Ubuntu 18.10 с немецким языковым стандартом / языковым пакетом по умолчанию (который не должен иметь никакого влияния на код выше afaik).