Java - 静态定义的字符列表

JD *_*ite 2 java string character-class

在任何标准库中都有字符类(alpha,numeric,alphanumeric)的定义?我正在检查字符串是否只包含字母数字字符或冒号:

StringUtils.containsOnly(input, ALPHA_NUMERIC + ":");
Run Code Online (Sandbox Code Playgroud)

我自己可以定义ALPHA_NUMERIC,但似乎常见的字符类将在标准库中定义,尽管我无法找到定义.

编辑:我确实考虑过正则表达式,但对于我的特定用例,执行时间很重要,简单的扫描更有效.

编辑:以下是测试结果,使用Regex,CharMatcher和简单扫描(对每个测试使用相同的有效/无效输入字符串集):

有效输入字符串:

CharMatcher,Num Runs:1000000,Valid Strings:true,Time(ms):1200

Regex,Num Runs:1000000,Valid Strings:true,Time(ms):909

Scan,Num Runs:1000000,Valid Strings:true,Time(ms):96

输入字符串无效:

CharMatcher,Num Runs:1000000,Valid Strings:false,Time(ms):277

Regex,Num Runs:1000000,Valid Strings:false,Time(ms):253

Scan,Num Runs:1000000,Valid Strings:false,Time(ms):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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我重新编译为一个独立的程序(我正在通过eclipse运行):

CharMatcherTester,Num Runs:1000000,Valid Strings:true,Time(ms):418

RegexTester,Num Runs:1000000,Valid Strings:true,Time(ms):812

ScanTester,Num Runs:1000000,Valid Strings:true,Time(ms):88

CharMatcherTester,Num Runs:1000000,Valid Strings:false,Time(ms):142

RegexTester,Num Runs:1000000,Valid Strings:false,Time(ms):223

ScanTester,Num运行:1000000,有效字符串:false,时间(ms):32

来源:https://bitbucket.org/jdeveloperw/testing(这是我第一次将测试结果发布到SO,所以评论很感激.)

Mat*_*hen 5

你最好的选择可能是一个正则表达式模式.

它应该匹配:

[\p{Alnum}:]*
Run Code Online (Sandbox Code Playgroud)
  • \p{Alnum} - ASCII字母数字
  • [] - 字符类(里面的任何字符都匹配一个字符)
  • : - 字面意思:
  • * - 0或更多

如果它是所有字母数字(或:).

您可以使用匹配或预编译正则表达式.