在 Java 中,我需要确保 String 只包含alphanumeric
,space
和dash
字符。
我找到了类org.apache.commons.lang.StringUtils
和几乎足够的方法isAlphanumericSpace(String)
......但我还需要包括破折号。
做这个的最好方式是什么?我不想使用正则表达式。
你可以使用:
StringUtils.isAlphanumericSpace(string.replace('-', ' '));
嗯......只需使用String.chatAt ( int ) 自己编程,这很容易......
使用位置索引遍历字符串中的所有字符,然后使用 ASCII 字符 0 到 9、a 到 z 和 A 到 Z 使用连续代码这一事实进行比较,因此您只需检查字符 x 是否以数字方式验证其中一个条件:
这是一个基本的代码示例(使用 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;
}
只需遍历字符串,使用 java.lang.Character 中的字符类方法来测试每个字符是否可以接受。这大概就是 StringUtils 方法所做的一切,而正则表达式只是驱动通用引擎做同样事情的一种方式。
您有 2 个选项中的 1 个: 1. 编写可以在字符串中的字符列表,然后遍历字符串检查以确保每个字符都在列表中。2. 编写一个不能在字符串中的字符列表,然后循环检查字符串以确保每个字符不在列表中。
选择任何更快的选项来组成列表。
绝对使用正则表达式。当有一个非常全面的系统来完成这项确切的任务时,编写自己的系统是没有意义的。如果您需要了解或复习正则表达式,请查看此网站,非常棒:http ://regexr.com
我会在这一点上挑战自己。