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