我使用Guava的CharMatcher已有很长时间了,它在所有方面都非常有效。现在,我看到其中的大多数方法现在在Guava 27.0.1中已弃用
文档说:“已弃用。许多数字是补充字符;请参阅类文档。”但是,在阅读了课程文档后,我仍然感到困惑。在大多数情况下,不赞成使用方法时,它们会告诉您另一种做事的方法,但是,这一次,我感觉文档基本上是在说“此类实际上无法正常工作,因此请不要使用它”
例如,仅保留字符串数字的正确方法是什么?在我干脆做之前:
String inputString = "abc123def456";
String outputString = CharMatcher.javaDigit().retainFrom(inputString);
答案 0 :(得分:4)
该方法的Javadoc状态:
@deprecated Many digits are supplementary characters; see the class documentation.
这意味着除了通常使用的0到9之间的数字外,还可以匹配其他字符。
在Guava中,有两种内置方法:digit()
和javaDigit()
。前者根据“ BMP ”的规范匹配“ Unicode”位数,而后者则根据“ Character#isDigit()
”的规范匹配“ BMP位数”。它们每个都匹配像Devanagari或Fullwidth之类的怪异字符
数字(我什至都不会链接它们;)),这很少是用户想要的,并且可能会引起误解。
这就是为什么(番石榴作者)首选的方式要明确的原因(稍后将在javadoc中进行说明):
如果您只想匹配ASCII数字,则可以使用
CharMatcher#inRange('0', '9')
。
在您的情况下,只需使用:
String outputString = CharMatcher.inRange('0', '9').retainFrom(inputString);
答案 1 :(得分:0)
一个更通用的解决方案,因为我需要一个:用 CharMatcher.forPredicate 替换已弃用的方法,并传入 the Java Character class 中的一种字符分类方法。
CharMatcher.forPredicate(Character::isDigit).retainFrom(inputString)