Wie kann festgestellt werden, ob ein String nicht alphanumerische Zeichen enthält?

Antworten:

146

Verwenden von Apache Commons Lang:

!StringUtils.isAlphanumeric(String)

Alternativ können Sie die Zeichenfolgen von String durchlaufen und Folgendes überprüfen:

!Character.isLetterOrDigit(char)

Sie haben noch ein Problem: Ihre Beispielzeichenfolge "abcdefà" ist alphanumerisch, da àes sich um einen Buchstaben handelt. Aber ich denke, Sie möchten, dass es als nicht alphanumerisch betrachtet wird, oder?!

Vielleicht möchten Sie stattdessen einen regulären Ausdruck verwenden:

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();
Fabian Barney
quelle
7
Ich möchte den Import externer Bibliotheken vermeiden, wenn dies nicht unbedingt erforderlich ist. Und ja: Ich möchte, dass à als nicht alphanumerisch betrachtet wird.
Eugeno
27

Ein Ansatz besteht darin, dies mit der String-Klasse selbst zu tun. Nehmen wir an, Ihre Zeichenfolge ist ungefähr so:

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

Eine andere Möglichkeit besteht darin, eine externe Bibliothek wie Apache Commons zu verwenden:

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
loscuropresagio
quelle
+1: Regex ist hier der Gewinner, denke ich, da das OP nicht wirklich nach alphanumerischen Zeichen suchen möchte. Er will etw. wie hasSpecialCharacters(String)mit seiner eigenen Definition von "speziell".
Fabian Barney
2
Das wird nicht ganz funktionieren: String.matches(...)In Java wird geprüft, ob der reguläre Ausdruck mit der gesamten Zeichenfolge übereinstimmt .
Ruakh
boolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$
Isaak Osipovich Dunayevsky
6

Sie müssen jedes Zeichen in der Zeichenfolge durchgehen und Character.isDigit(char);oder aktivierenCharacter.isletter(char);

Alternativ können Sie Regex verwenden.

Mechkov
quelle
1
Beispielsweise ist "-1234" eine Zahl, keine alphanumerische Zeichenfolge. Aber Ihre Logik Character.isDigit gibt false für "-" zurück. :(
Abhishek
Ich denke, es ist Character.isLetter nicht Character.isletter
InterLinked
4

Verwenden Sie diese Funktion, um zu überprüfen, ob eine Zeichenfolge alphanumerisch ist:

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

Es erspart das Importieren externer Bibliotheken und der Code kann leicht geändert werden, wenn Sie später verschiedene Validierungsprüfungen für Zeichenfolgen durchführen möchten.

Dan Bray
quelle
1

Wenn Sie die Apache Commons-Bibliothek verwenden können, verfügt Commons-Lang StringUtilsüber eine Methode isAlphanumeric(), die genau das tut, wonach Sie suchen.

Shaun
quelle
1

string.matches("^\\W*$");sollte tun, was Sie wollen, aber es enthält keine Leerzeichen. string.matches("^(?:\\W|\\s)*$");stimmt auch mit Leerzeichen überein.

nike4613
quelle
0

Sie können die statische Methode isLetter (char c) der Zeichenklasse in Java.lang verwenden.

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

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

Obwohl dies für Zahlen nicht funktioniert, können Sie überprüfen, ob die Werte für Klein- und Großbuchstaben gleich sind oder nicht. Bei nicht alphabetischen Zeichen sind sie gleich. Sie sollten zuvor nach Zahlen suchen, um die Benutzerfreundlichkeit zu verbessern

Abhishek Chaudhary
quelle