5

在 Java 中,我需要确保 String 只包含alphanumeric,spacedash字符。

我找到了类org.apache.commons.lang.StringUtils和几乎足够的方法isAlphanumericSpace(String)......但我还需要包括破折号。

做这个的最好方式是什么?我不想使用正则表达式。

4

5 回答 5

13

你可以使用:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));
于 2009-04-15T00:08:41.410 回答
6

嗯......只需使用String.chatAt ( int ) 自己编程,这很容易......

使用位置索引遍历字符串中的所有字符,然后使用 ASCII 字符 0 到 9、a 到 z 和 A 到 Z 使用连续代码这一事实进行比较,因此您只需检查字符 x 是否以数字方式验证其中一个条件:

  • 在“0”和“9”之间
  • 在“a”和“z”之间
  • 在'A和'Z'之间
  • 空间 ' '
  • 连字符“-”

这是一个基本的代码示例(使用 CharSequence,它可以让您传递一个字符串,也可以传递一个 StringBuilder 作为 arg):

public boolean isValidChar(CharSequence seq) {
    int len = seq.length();
    for(int i=0;i<len;i++) {
        char c = seq.charAt(i);
        // Test for all positive cases
        if('0'<=c && c<='9') continue;
        if('a'<=c && c<='z') continue;
        if('A'<=c && c<='Z') continue;
        if(c==' ') continue;
        if(c=='-') continue;
        // ... insert more positive character tests here
        // If we get here, we had an invalid char, fail right away
        return false;
    }
    // All seen chars were valid, succeed
    return true;
}
于 2009-04-14T23:46:02.807 回答
3

只需遍历字符串,使用 java.lang.Character 中的字符类方法来测试每个字符是否可以接受。这大概就是 StringUtils 方法所做的一切,而正则表达式只是驱动通用引擎做同样事情的一种方式。

于 2009-04-14T23:45:39.017 回答
1

您有 2 个选项中的 1 个: 1. 编写可以在字符串中的字符列表,然后遍历字符串检查以确保每个字符都在列表中。2. 编写一个不能在字符串中的字符列表,然后循环检查字符串以确保每个字符不在列表中。

选择任何更快的选项来组成列表。

于 2009-04-14T23:47:47.887 回答
0

绝对使用正则表达式。当有一个非常全面的系统来完成这项确切的任务时,编写自己的系统是没有意义的。如果您需要了解或复习正则表达式,请查看此网站,非常棒:http ://regexr.com

我会在这一点上挑战自己。

于 2015-06-28T00:34:33.367 回答