Как определить, имеет ли строка не алфавитно-цифровые символы? - PullRequest
67 голосов
/ 23 ноября 2011

Мне нужен метод, который может сказать мне, если строка содержит не алфавитно-цифровые символы.

Например, если строка "abcdef?"или "abcdefà", метод должен возвращать true.

Ответы [ 7 ]

132 голосов
/ 24 ноября 2011

Использование 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();
26 голосов
/ 24 ноября 2011

Один из подходов состоит в том, чтобы сделать это, используя сам класс String.Допустим, ваша строка выглядит примерно так:

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

одна другая - использовать внешнюю библиотеку, такую ​​как Apache commons:

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
5 голосов
/ 23 ноября 2011

Вы должны пройти через каждый символ в строке и проверить Character.isDigit(char); или Character.isletter(char);

В качестве альтернативы, вы можете использовать регулярное выражение.

2 голосов
/ 22 октября 2017

Используйте эту функцию, чтобы проверить, является ли строка буквенно-цифровой:

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

Это избавляет от необходимости импортировать внешние библиотеки, и код может быть легко изменен, если позже вы захотите выполнить различные проверки правильности строк.

1 голос
/ 21 июля 2015

string.matches("^\\W*$"); должен делать то, что вы хотите, но это не включает пробелы.string.matches("^(?:\\W|\\s)*$"); также соответствует пробелу.

1 голос
/ 24 ноября 2011

Если вы можете использовать библиотеку Apache Commons, то у Commons-Lang StringUtils есть метод с именем isAlphanumeric(), который делает то, что вы ищете.

0 голосов
/ 19 июля 2017

Вы можете использовать статический метод isLetter (char c) класса Character в Java.lang.

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

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