java - 如何检查字符串在 Guava 中是否只有字母数字字符?

标签 java guava

实际上,我想检查它是否只有字母数字加上这些:.-_ [空格]

如果使用外部库,我想使用 Guava,因为它已经包含在我的项目中...

最佳答案

无正则表达式且更具可读性(?)的解决方案可以使用 Guava 的 CharMatcher类:

boolean matched = CharMatcher.JAVA_LETTER_OR_DIGIT.or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-")).matchesAllOf(yourString);

也许 ASCII 字符适合您的用例?如果是这样,请使用:

boolean matched = CharMatcher.ASCII.matchesAllOf(yourString);

参见 wiki page示例和描述。

此外,您可能希望将匹配器提取为常量并预先计算它:

private static final CharMatcher CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT
    .or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-"))
    .precomputed();

更有趣的是,如果您阅读 CharMatcher 的文档,您可能会发现 "digit" , "letter""whitespace"在 Java 中是非常模糊的术语:

Determines whether a character is a digit according to Java's definition. If you only care to match ASCII digits, you can use inRange('0', '9').

Determines whether a character is a letter according to Java's definition. If you only care to match letters of the Latin alphabet, you can use inRange('a', 'z').or(inRange('A', 'Z')).

因此您可能希望使用明确的字符范围:

private static final CharMatcher CHAR_MATCHER_ASCII = 
    CharMatcher.inRange('0', '9')
        .or(CharMatcher.inRange('a', 'z'))
        .or(CharMatcher.inRange('A', 'Z'))
        .or(CharMatcher.anyOf(" _.-")) // note space here
        .precomputed();

关于java - 如何检查字符串在 Guava 中是否只有字母数字字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510255/

相关文章:

java - 使用 java 泛型和接口(interface)扩展可比对象

java - 2个系列之间的区别? (collection1 中的元素,但不在 collection2 中)

java - Guava 的 Multimaps 类的 index() 函数内部是如何工作的?

java - Android - 如何在指定时间在后台下载数据

java - WindowBuilder如何使用不同的按钮来显示计数器

java - 当我在 aws elastic beanstalk 中部署 Spring Boot 项目时,如何压缩 Spring Boot 中的 MultipartFie[] 大小?

java - 为什么 google-collections 包含语义相同的函数和奇怪的泛型?

java - 设置JPanel的大小

java - 使用 Guava 10 的谓词和函数接口(interface)与 GWT 2.4.0

java - Gradle jar 不包含 Guava 前提条件