Я пытаюсь преобразовать порядковую строку, скажем, «ЧЕТВЕРТЫЙ» в целое число 4. Как это сделать с помощью библиотеки International Components for Unicode для Java, icu4j?
RuleBasedNumberFormat formatter = new RuleBasedNumberFormat(Locale.US, RuleBasedNumberFormat.ORDINAL);
return formatter.parse("FOURTH").intValue();
Похоже, это не работает, так как возвращается 0. Я ожидаю, что это вернет 4.
Любая помощь будет оценена по достоинству. Спасибо.
Для меня ваш код не возвращается 0
. Выбрасывает java.text.ParseException: Unparseable number: "FOURTH"
.
Интересно, что я нашел несколько существующих вопросов, которые задают вопрос о преобразовании целого числа в порядковый номер, но это единственный вопрос, который я смог найти, задающий вопрос о противоположном, порядковом тексте в целое число.
Итак, я прочитал документацию Javadoc из icu4j и RuleBasedNumberFormat не имеет ЧЕТВЕРТОЙ в качестве разборчивой строки, хотя он поддерживает четыре. И вместо RuleBasedNumberFormat.ORDINAL используется RuleBasedNumberFormat.SPELLOUT.
RuleBasedNumberFormat formatter = new RuleBasedNumberFormat( Locale.US , RuleBasedNumberFormat.SPELLOUT );
try
{
int result = formatter.parse( "FOURTH".toLowerCase( Locale.ROOT ) ).intValue();
System.out.println( "result = " + result );
}
catch ( ParseException e )
{
… add code to handle exception.
}
При запуске:
4
Вот как должен выглядеть код, и обязательно используйте .toLowerCase(Locale.ROOT), потому что синтаксический анализ не работает со строками в верхнем регистре.
Хороший! Предупреждение: это работает для THIRTY-THIRD
, но для THIRTYTHIRD
неправильно возвращает 30
(без ошибок). Итак, это зависит от переноса (и орфографии, конечно).
Вы можете использовать PluralRules. unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/…