Альтернатива для методов Charmatcher Гуавы, таких как javaDigit ()? - PullRequest
0 голосов
/ 24 февраля 2019

Я давно использую CharMatcher от Guava, и он отлично работает для всего.Теперь я вижу, что большинство методов в нем теперь устарели в Guava 27.0.1

В документации написано: «устарело. Многие цифры являются дополнительными символами; см. Документацию класса».Тем не менее, после прочтения документации класса, я все еще в замешательстве.В большинстве случаев, когда метод устарел, он предлагает вам альтернативный способ сделать что-то, однако в этот раз я чувствую, что документация в основном говорит: «Этот класс на самом деле не работает правильно, поэтому не используйте его».

Как правильно, например, сохранять только цифры строки?Прежде чем я мог просто сделать:

String inputString = "abc123def456";
String outputString = CharMatcher.javaDigit().retainFrom(inputString);

1 Ответ

0 голосов
/ 24 февраля 2019

Javadoc для метода гласит:

@deprecated Many digits are supplementary characters; see the class documentation.

Это означает, что помимо чисел от 0 до 9, которые вы обычно используете, могут совпадать и другие символы.

В Гуаве для этого есть два встроенных метода: digit() и javaDigit().Первые соответствуют " BMP цифр согласно Unicode " спецификациям, последние соответствуют " BMP цифрам согласно Character#isDigit()».Каждый из них соответствует странным символам, таким как деванагари или цифры полной ширины (я даже не буду связывать их;)), что редко является тем, чего хотят пользователи, и может вводить в заблуждение.

Вот почему предпочтительный способ (авторы гуавы) должен быть явным (об этом позже будет сказано в javadoc):

Если вы хотите совпадать только с цифрами ASCII, вы можете использовать CharMatcher#inRange('0', '9').

В вашем случае просто используйте:

String outputString = CharMatcher.inRange('0', '9').retainFrom(inputString);
...