Преобразование порядковой строки в целое число с помощью icu4j

Я пытаюсь преобразовать порядковую строку, скажем, «ЧЕТВЕРТЫЙ» в целое число 4. Как это сделать с помощью библиотеки International Components for Unicode для Java, icu4j?

RuleBasedNumberFormat formatter = new RuleBasedNumberFormat(Locale.US, RuleBasedNumberFormat.ORDINAL);

return formatter.parse("FOURTH").intValue();

Похоже, это не работает, так как возвращается 0. Я ожидаю, что это вернет 4.

Любая помощь будет оценена по достоинству. Спасибо.

Вы можете использовать PluralRules. unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm‌​/…

user15773347 05.04.2023 17:10

Для меня ваш код не возвращается 0. Выбрасывает java.text.ParseException: Unparseable number: "FOURTH".

andrewJames 05.04.2023 17:38

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

Basil Bourque 05.04.2023 21:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я прочитал документацию 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 (без ошибок). Итак, это зависит от переноса (и орфографии, конечно).

andrewJames 05.04.2023 20:02

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