Java - String nur Buchstaben-Eingabe erlauben?

3 Antworten

Von Experte FaTech bestätigt

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.

Woher ich das weiß:Berufserfahrung – Java-Entwickler von Batch- und Webanwendungen
FaTech  30.05.2023, 09:20

Alternativ, sollte _ auch erlaubt sein, geht auch \w.

Zustimmung, hätte ich auch so gemacht

1
Lealaluuu 
Fragesteller
 30.05.2023, 10:49
String str = "X";
String regex = "[A-Za-z]"; 
// Test auf Großbuchstabe (ASCII)
boolean matches = str.matches(regex);

so in etwa?
0
ZaoDaDong  30.05.2023, 10:50
@Lealaluuu

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.

1
Lealaluuu 
Fragesteller
 30.05.2023, 13:25
@ZaoDaDong

/**

* 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?

0
ZaoDaDong  30.05.2023, 14:06
@Lealaluuu

Du kannst beim Antworten ganz rechts oben vom Textfeld auf "Formatierungen einblenden" klicken, dann öffnen sich ein paar Formatierungsoptionen, unter anderem "Quelltext"

0

Ganz modern:

if (eingabe.chars().allMatch(Character::isLetter))) {
  System.out.println("Die Eingabe war erfolgreich");
} else {
  System.out.println("Bitte nur Buchstaben!");
}
Lealaluuu 
Fragesteller
 30.05.2023, 11:30

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.

0
Schachpapa  30.05.2023, 11:57
@Lealaluuu

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.

1