Java String checken?
In meiner Java Klausur mussten wir ein Wort (String) prüfen, ob es dem Neo Latin entspricht. Heißt a-z
Ich hatte in der API nachgesehen, ob die Klasse eine Methode dafür hat. Hab (glaub) .Matches() gesehen, welches per regex das Wort prüft. Nur hatten wir bisher kein regex und ich konnte mich leider nicht an die Syntax erinnern.
Daher nahm ich ein Hashset und hab dort die chars reingeschrieben, die erlaubt sind (a-z)
Dann den String in ein char Array gesteckt. Und iteriert und geprüft.
Ich vermute aber, dass es ein besseren Weg als das gibt.
Welchen Weg gibt's noch, außer streams oder ähnlich sehr fortgeschrittene Lösungen?
3 Antworten
Die einfachste Lösung ist wahrscheinlich wirklich per Regex. Würde dann so aussehen:
public static boolean isNeoLatin(String word) {
return word.matches("[a-z]*");
}
Das [a-z] bedeutet halt, dass das Zeichen zwischen a und z (nur Kleinbuchstaben) sein muss und das Sternchen hintendran bedeutet, dass die Anzahl beliebig groß ist (inklusive 0 Zeichen). Falls es mindestens ein Zeichen lang sein muss, muss statt dem * halt ein + hin.
oder du gehst jeden Buchstaben durch und prüfst, ob er im erlaubten Bereich ist:
public static boolean isNeoLatin(String word) {
for (char c:word.toCharArray()) {
if (c < 'a' || c > 'z') {
return false;
}
}
return true;
}
oder du machst eine Liste mit allen erlaubten Buchstaben und prüfst für jedes Zeichen, ob es in den erlaubten Buchstaben vorkommt:
public static boolean isNeoLatin(String word) {
for (char c:word.toCharArray()) {
if ("abcdefghijklmnopqrstuvwxyz".indexOf(c) < 0 ) {
return false;
}
}
return true;
}
ob es dem Neo Latin entspricht. Heißt a-z
Dann musst du doch nur alle chars durchiterieren und schauen, ob sie >= 'a' und =< 'z' sind, fertig. Wozu eine Map?
Mit Streams ausgedrückt (was man natürlich genausogut mit einer for-Schleife machen kann, aber ich bin tippfaul):
"abcde".codePoints().allMatch(c -> c >= 'a' && c <= 'z');
Klar, kann man auch mit Regex und "[a-z]" machen. Da ist es auch leichter, komplexere Regeln umzusetzen (etwa wenn auch Umlaute & Co. dabei sein sollen - das obige beschränkt sich auf ASCII).
Stimmt chars sind ja auch numerisch, ganz vergessen
Also deine Idee mit den regex find ich gut! Hätte diese Aufgabe auch so gelöst.
Übrigens hier die Regeln für regular expressions in Java ;)
https://www.vogella.com/tutorials/JavaRegularExpressions/article.html