Guava 的 Charmatcher 方法的替代方法,例如 javaDigit()?

sat*_*nam 4 java deprecated guava

我已经使用 Guava 的 CharMatcher 很长时间了,它对所有事情都很好。现在我看到其中的大部分方法现在在 Guava 27.0.1 中已弃用

文档说“已弃用。许多数字是补充字符;请参阅类文档。” 但是,看了class文档后,还是一头雾水。大多数情况下,当一个方法被弃用时,他们会告诉你另一种做事的方法,但是,这一次,我觉得文档基本上是在说“这个类不能正常工作,所以不要使用它” .

例如,仅保留字符串的数字的正确方法是什么?在我可以简单地做之前:

String inputString = "abc123def456";
String outputString = CharMatcher.javaDigit().retainFrom(inputString);
Run Code Online (Sandbox Code Playgroud)

Xae*_*ess 7

该方法的 Javadoc 指出:

@deprecated Many digits are supplementary characters; see the class documentation.
Run Code Online (Sandbox Code Playgroud)

这意味着除了从 0 到 9 的数字(您通常使用的数字)之外,还可以匹配其他字符。

在 Guava 中,有两种内置方法:digit()javaDigit(). 前者匹配“ BMP数字根据Unicode ”规范,后者匹配“ BMP 数字根据Character#isDigit()”。他们每个人都匹配奇怪的字符,如天城文或全角数字(我什至不会链接它们;)),这很少是用户想要的,并且可能会产生误导。

这就是为什么首选方式(由番石榴作者)是明确的(稍后在 javadoc 中说明):

如果您只想匹配 ASCII 数字,则可以使用CharMatcher#inRange('0', '9').

在您的情况下,只需使用:

String outputString = CharMatcher.inRange('0', '9').retainFrom(inputString);
Run Code Online (Sandbox Code Playgroud)