77

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

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

4

8 回答 8

153

使用 Apache Commons 语言:

!StringUtils.isAlphanumeric(String)

交替迭代字符串的字符并检查:

!Character.isLetterOrDigit(char)

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

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

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();
于 2011-11-23T20:00:43.497 回答
27

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

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

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

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
于 2011-11-23T20:03:16.663 回答
6

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

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

于 2011-11-23T19:57:33.497 回答
4

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

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

它省去了导入外部库的麻烦,并且如果您以后希望对字符串执行不同的验证检查,可以轻松修改代码。

于 2017-10-22T14:15:15.003 回答
2

如果您可以使用 Apache Commons 库,那么 Commons-LangStringUtils有一个名为的方法可以满足isAlphanumeric()您的需求。

于 2011-11-23T20:00:07.630 回答
1

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

于 2015-07-21T20:18:00.563 回答
0

虽然它不适用于数字,但您可以检查小写和大写值是否相同,对于非字母字符它们将相同,您应该在此之前检查数字以获得更好的可用性

于 2020-07-17T07:07:04.353 回答
0

您可以在 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;
}
于 2017-07-18T21:12:19.453 回答