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

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

+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.


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.


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.


1

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


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.