如何确定一个string是否包含非字母数字字符?
我需要一个可以告诉我一个string是否包含非字母数字字符的方法。
例如,如果string是“abcdef?” 或“abcdefà”,该方法必须返回true。
使用Apache Commons语言:
!StringUtils.isAlphanumeric(String)
另外迭代String的字符并检查:
!Character.isLetterOrDigit(char)
您还有一个问题:您的示例string“abcdefà”是字母数字,因为à
是一个字母。 但我想你想要它被认为是非字母数字,对吗?
所以你可能想用正则expression式来代替:
String s = "abcdefà"; Pattern p = Pattern.compile("[^a-zA-Z0-9]"); boolean hasSpecialChar = p.matcher(s).find();
一种方法是使用String类本身来做到这一点。 假设你的string是这样的:
String s = "some text"; boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");
另外一个是使用外部库,比如Apache commons:
String s = "some text"; boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
你必须经过string中的每个字符并检查Character.isDigit(char);
或Character.isletter(char);
另外,你可以使用正则expression式。
如果你可以使用Apache Commons库,那么Commons-Lang StringUtils
有一个名为isAlphanumeric()
的方法,它可以完成你正在寻找的任务。
string.matches("^\\W*$");
应该做你想做的,但不包括空格。 string.matches("^(?:\\W|\\s)*$");
也匹配空白。
您可以使用Java.lang中的Character类的isLetter(char c)静态方法。
public boolean isAlpha(String s) { char[] charArr = s.toCharArray(); for(char c : charArr) { if(!Character.isLetter(c)) { return false; } } return true; }
使用此函数检查string是否是字母数字:
public boolean isAlphanumeric(String str) { char[] charArray = str.toCharArray(); for(char c:charArray) { if (!Character.isLetterOrDigit(c)) return false; } return true; }
这样可以省去导入外部库的麻烦,如果稍后希望对string执行不同的validation检查,则可以轻松修改代码。