Java - String nur Buchstaben-Eingabe erlauben?
Hallo,
ich suche nach einer effizienten Vorgehensweise wie man dem Nutzer nur die Eingabe von Buchstaben in Java erlaubt.
Meine Überlegung war durch die Überprüfung einer Liste, beispielsweise mit der contains-Funktion.
<
public void nurBuchstabenPrüfung(String eingabe) {
if (eingabe.contains(" ")){
System.out.println("Das Wort enthält ein Leerzeichen");
} else if (eingabe.contains("*")) {
System.out.println("Die Eingabe enthält unzulässige Zeichen");
}
...
..
.
else {
System.out.println("Die Eingabe war erfolgreich");
}
}
>
Gibt es elegantere Methoden? Würde mich über Verbesserungsvorschläge freuen.
3 Antworten
Wenn du den String nicht in seine Einzelteile zerlegen willst, würde ich einfach eine RegEx-Prüfung empfehlen.
[a-zA-Z]
erlaubt nur Klein- und Großbuchstaben von A-Z.
Alternativ, sollte _ auch erlaubt sein, geht auch \w.
Zustimmung, hätte ich auch so gemacht
in etwa, ja.
Wenn du direkt den ganzen String prüfen willst, dann nimm als
String regex = "[a-zA-z]+";
Das "+" bedeutet hier, dass sich ein beliebiges Zeichen zwischen a und Z beliebig häufig wiederholen darf, aber nicht muss.
Du musst vermutlich auch erst noch ein Zwischenobjekt der Klasse "Pattern" erzeugen, ich weiß nicht, ob das mit String.matches(String) so funktioniert.
/**
* Prüfung, ob die Eingabe nur Buchstaben enthält (regex)
* @param eingabe -> Vom User
*/
public void testBuchstaben2(String eingabe) {
String regex = "[a-zA-z]+";
System.out.println(Pattern.matches(regex,eingabe));
}
habs getestet, so funktioniert es. Danke für den Hinweis mit dem "+".. das hat mir gefehlt. Eine Frage noch wie kann man hier in gutefrage einen Codeblock einfügen?
Du kannst beim Antworten ganz rechts oben vom Textfeld auf "Formatierungen einblenden" klicken, dann öffnen sich ein paar Formatierungsoptionen, unter anderem "Quelltext"
Ganz modern:
if (eingabe.chars().allMatch(Character::isLetter))) {
System.out.println("Die Eingabe war erfolgreich");
} else {
System.out.println("Bitte nur Buchstaben!");
}
Erstmal danke für die Hilfe. Hätte noch eine Frage dazu und zwar was bedeutet "Character::isLetter" dieser Ausdruck, bzw. kannst du mir die Beschreibung dazu verlinken (möchte es mir gerne durchlesen und verstehen)
verstehe die Bedeutung " :: " hiervon nicht.
Das ist schon ein bisschen für Fortgeschrittene ;-)
die Methode chars() macht aus einem String einen Stream, dieser fließt in die Methode allMatch(...). allMatch liefert True, wenn sein Argument (eine Funktion, die einen Wahrheitswert liefert) für alle Eingaben aus dem Stream True liefert und bricht mit False ab, sobald es nicht zutrifft.
Character::isletter ist eine Referenz auf die Funktion "boolean isLetter(char c)" aus der Klasse Character.
Wenn du dich noch nicht als Fortgeschrittener einstufen würdest, schreibst du vielleicht besser:
boolean nurBuchstaben(String s) {
for (int i=0; i < s.length(); i++) {
char c = s.charAt(i);
if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')))
return False;
}
return True;
}
liefert False, sobald ein Buchstabe kein Großbuchstabe und auch kein Kleinbuchstabe ist.
Liefert True, wenn es bis zum Ende des String durchlaufen kann.