Java 如何检查字符串在番石榴中是否只有字母数字字符?

Java 如何检查字符串在番石榴中是否只有字母数字字符?,java,guava,Java,Guava,实际上,我想检查它是否只有字母数字加上这些:.-[空格] 如果使用外部库,我希望使用番石榴,因为它已经包含在我的项目中…您不需要番石榴。只要用合适的工具进行字符串匹配即可 i、 e 实际上你不需要任何图书馆。您可以使用带有普通Java的正则表达式来实现这一点 正则表达式:([A-Za-z0-9\-\\\\\\\.]+) 无Regexp且可读性更强的(?)解决方案可以使用Guava的类: 也许ASCII字符适合您的用例?如果是,请使用: boolean matched = CharMatcher.

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


如果使用外部库,我希望使用番石榴,因为它已经包含在我的项目中…

您不需要番石榴。只要用合适的工具进行字符串匹配即可

i、 e


实际上你不需要任何图书馆。您可以使用带有普通Java的正则表达式来实现这一点

正则表达式:
([A-Za-z0-9\-\\\\\\\.]+)


无Regexp且可读性更强的(?)解决方案可以使用Guava的类:

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

boolean matched = CharMatcher.ASCII.matchesAllOf(yourString);
有关示例和说明,请参见

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

private static final CharMatcher CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT
    .or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-"))
    .precomputed();
更有趣的是,如果您阅读
CharMatcher
的文档,您可能会发现,Java中的术语非常模糊:

根据Java的定义确定字符是否为数字。如果您只想匹配ASCII数字,可以使用
inRange('0','9')

根据Java的定义确定字符是否为字母。如果您只想匹配拉丁字母表中的字母,可以使用
inRange('a','z')或(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();

[:alnum:]-Apache正则表达式API的字母数字字符

boolean matched = CharMatcher.ASCII.matchesAllOf(yourString);
private static final CharMatcher CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT
    .or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-"))
    .precomputed();
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();