在任何标准库中是否有字符类(字母、数字、字母数字)的定义?我正在检查字符串是否仅包含字母数字字符或冒号:
StringUtils.containsOnly(input, ALPHA_NUMERIC + ":");
我可以自己定义 ALPHA_NUMERIC,但似乎通用字符类将在标准库中定义,尽管我一直无法找到定义。
编辑:我确实考虑过正则表达式,但对于我的特定用例,执行时间很重要,简单的扫描更有效。
编辑:这里是使用 Regex、CharMatcher 和简单扫描的测试结果(对每个测试使用相同的一组有效/无效输入字符串):
有效输入字符串:
CharMatcher,运行次数:1000000,有效字符串:true,时间(毫秒):1200
正则表达式,运行次数:1000000,有效字符串:true,时间(毫秒):909
扫描,运行次数:1000000,有效字符串:true,时间(毫秒):96
无效的输入字符串:
CharMatcher,运行次数:1000000,有效字符串:false,时间(毫秒):277
正则表达式,运行次数:1000000,有效字符串:false,时间(毫秒):253
扫描,运行次数:1000000,有效字符串:false,时间(毫秒):36
这是执行扫描的代码:
public boolean matches(String input) {
for(int i=0; i<input.length(); i++) {
char c = input.charAt(i);
if( !Character.isLetterOrDigit(c) && c != ':') {
return false;
}
}
return true;
}
编辑:我重新编译为一个独立的程序(我正在通过 eclipse 运行):
CharMatcherTester,运行次数:1000000,有效字符串:true,时间(毫秒):418
RegexTester,运行次数:1000000,有效字符串:true,时间(毫秒):812
ScanTester,运行次数:1000000,有效字符串:true,时间(毫秒):88
CharMatcherTester,运行次数:1000000,有效字符串:false,时间(毫秒):142
RegexTester,运行次数:1000000,有效字符串:false,时间(毫秒):223
ScanTester,运行次数:1000000,有效字符串:false,时间(毫秒):32
来源:https ://bitbucket.org/jdeveloperw/testing (这是我第一次将测试结果发布到 SO,因此感谢您的评论。)