【发布时间】:2012-04-06 00:34:59
【问题描述】:
在任何标准库中是否有字符类(字母、数字、字母数字)的定义?我正在检查一个字符串是否只包含字母数字字符或冒号:
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 上发布测试结果,感谢 cmets。)
【问题讨论】:
-
据我所知不存在这样的库。
-
这是您要查找的内容吗:Character.getType(int) 和 Character.getType(char)。
-
您认为“äöüÄÜÖßø¢...”是否按字母顺序排列?
标签: java string character-class