如何确定一个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检查,则可以轻松修改代码。