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


Answers:


146

使用Apache Commons Lang:

!StringUtils.isAlphanumeric(String)

另一种方法是遍历String的字符并检查:

!Character.isLetterOrDigit(char)

您还剩下一个问题:示例字符串“abcdefà”是字母数字,因为à是字母。但我认为您希望将其视为非字母数字,对吗?

因此,您可能想使用正则表达式:

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

7
如果非绝对必要,我想避免导入外部库。是的:我希望à被视为非字母数字。
lugeno

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);

+1:我认为正则表达式是赢家,因为OP确实不希望检查字母数字字符。他想……。就像hasSpecialCharacters(String)他对“特殊”的定义一样。
Fabian Barney

2
那是行不通的:String.matches(...)在Java中,检查regex是否匹配整个字符串。
ruakh

boolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$
Isaak Osipovich Dunayevsky

6

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

另外,您可以使用正则表达式。


1
例如,“-1234”是数字,而不是字母数字字符串。但是您的逻辑Character.isDigit将为“-”返回false。:(
Abhishek 2014年

我认为这是Character.isLetter而不是Character.isletter
InterLinked

4

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

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

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


1

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


1

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


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;
}

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.