如何确定String是否包含非字母数字字符?

时间:2011-11-23 19:53:57

标签: java string character alphanumeric

我需要一个可以告诉我String是否包含非字母数字字符的方法。

例如,如果字符串是“abcdef?”或者“abcdefà”,该方法必须返回true。

8 个答案:

答案 0 :(得分:130)

使用Apache Commons Lang:

!StringUtils.isAlphanumeric(String)

Alternativly迭代String的字符并检查:

!Character.isLetterOrDigit(char)

你还有一个问题: 您的示例字符串“abcdefà”是字母数字,因为à是一个字母。但我认为你希望它被认为是非字母数字的,对吧?!

所以你可能想要使用正则表达式:

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();

答案 1 :(得分:24)

一种方法是使用String类本身来做到这一点。 假设您的字符串是这样的:

String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");

另一个是使用外部库,例如Apache commons:

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);

答案 2 :(得分:5)

您必须浏览字符串中的每个字符并检查Character.isDigit(char);Character.isletter(char);

或者,您可以使用正则表达式。

答案 3 :(得分:1)

如果你可以使用Apache Commons库,那么Commons-Lang StringUtils有一个名为isAlphanumeric()的方法可以完成你正在寻找的东西。

答案 4 :(得分:1)

string.matches("^\\W*$");应该做你想要的,但它不包括空格。 string.matches("^(?:\\W|\\s)*$");也匹配空格。

答案 5 :(得分:1)

使用此功能检查字符串是否为字母数字:

public boolean isAlphanumeric(String str)
{
    char[] charArray = str.toCharArray();
    for(char c:charArray)
    {
        if (!Character.isLetterOrDigit(c))
            return false;
    }
    return true;
}

它可以节省导入外部库的费用,如果您以后希望对字符串执行不同的验证检查,则可以轻松修改代码。

答案 6 :(得分:0)

您可以在Java.lang中使用isLetter(char c)Character类的静态方法。

public boolean isAlpha(String s) {
    char[] charArr = s.toCharArray();

    for(char c : charArr) {
        if(!Character.isLetter(c)) {
            return false;
        }
    }
    return true;
}

答案 7 :(得分:0)

尽管它不适用于数字,但是您可以检查小写和大写值是否相同,对于非字母字符,它们将是相同的,您应该在此之前检查数字以提高可用性