在Java中,我需要确保一个字符串只包含字母数字、空格和破折号。我找到了类org.apache.commons.lang.StringUtils和几乎足够的方法isAlphanumericSpace(String)...但我还需要包括破折号。有什么最好的方法可以做到这一点吗?我不想使用正则表达式。
你可以使用:
StringUtils.isAlphanumericSpace(string.replace('-', ' '));
嗯…只需要使用String.charAt(int)自己编写程序,这很容易…
使用位置索引迭代字符串中的所有char,然后使用ASCII字符0到9、a到z和A到Z使用连续代码的事实进行比较,因此您只需要检查字符x数值上是否满足以下条件之一:
以下是一个基本的代码示例(使用CharSequence,它可以让您传递String但也可以传递StringBuilder作为参数):
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方法所做的所有事情了,而正则表达式只是驱动通用引擎执行相同操作的一种方式。
一定要使用正则表达式。在这个确切的任务中,自己编写系统没有任何意义,因为已经有一个非常全面的系统。如果您需要学习或复习正则表达式,请查看这个网站,它非常好:http://regexr.com
我会挑战你自己做这件事。