实际上,我想检查一下是否只有字母数字加上以下内容:.-_ [space]
如果使用外部库,我想使用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页面。
另外,您可能需要将匹配器提取为常量并对其进行预先计算:
private static final CharMatcher CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT
.or(CharMatcher.WHITESPACE)
.or(CharMatcher.anyOf("_.-"))
.precomputed();
更有趣的是,如果您阅读CharMatcher
的文档,您可能会发现Java中的“ digit”,“ letter”和“ whitespace”是相当含糊的术语:
根据Java的定义确定字符是否为数字。如果您只想匹配ASCII数字,则可以使用
inRange('0', '9')
。
或者
根据Java的定义确定字符是否为字母。如果您只想匹配拉丁字母,则可以使用
inRange('a', 'z').or(inRange('A', 'Z'))
。
因此,您可能需要使用显式的char范围:
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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句