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();