Як визначити, чи має рядок небуквено-цифрові символи?


76

Мені потрібен метод, який може сказати мені, чи має рядок не буквено-цифрові символи.

Наприклад, якщо рядок "abcdef?" або "abcdefà", метод повинен повертати true.



Відповіді:


147

Використання Apache Commons Lang:

!StringUtils.isAlphanumeric(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)із власним визначенням "особливого".
Фабіан Барні,

2
Це не буде повністю працювати: String.matches(...)у Java перевіряє, чи регулярний вираз відповідає цілому рядку.
ruahh

boolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$
Ісаак Осипович Дунаєвський,

6

Ви повинні пройти кожен символ у рядку та перевірити Character.isDigit(char);абоCharacter.isletter(char);

Крім того, ви можете використовувати регулярний вираз.


1
Наприклад, "-1234" - це число, а не буквено-цифровий рядок. Але ваша логіка Character.isDigit поверне false для "-". :(
Абхішек,

Я думаю, що це 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-Lang StringUtilsє метод, який називається таким, isAlphanumeric()що робить те, що ви шукаєте.


1

string.matches("^\\W*$");повинен робити те, що хочеш, але не включає пробіли. string.matches("^(?:\\W|\\s)*$");також відповідає пробілам.


0

Ви можете використовувати статичний метод 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;
}

0

Незважаючи на те, що це не буде працювати для чисел, ви можете перевірити, чи є однакові чи нічні, і великі регістри. Для не алфавітних символів вони будуть однаковими, слід перевірити число перед цим для кращого використання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.