Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Guten Abend,
gibt es eine Möglichkeit, try and catch zu wiederholen, sodass man die while loop im nachfolgenden code durch ein try and catch ersetzen könnte?
Java:
System.out.println("Alter von Person " + Person + " bitte:");
Scanner Input = new Scanner(System.in);
String AgeConditions = "[1-9]{1}[0-9]*";
String inputAge = Input.next();
while (!inputAge.matches(AgeConditions)){
System.out.println("Das von dir für Person " + Person + " eingegebene Alter ist ungültig. Bitte gib ein Neues ein.");
inputAge = Input.next();
Also das eine ist eine Schleife und das andere ist nur ein Konstrukt, mit dem Fehler/Exceptions abgefangen werden. Das eine kann nicht das andere ersetzen.
Kleiner Tipp zu deiner Regular Expression: Die Prüft nur, dass Zahlen enthalten sind. Folgendes würde Problemlos bestehen: 13Foo Benutze deshalb die ^ und $ Steuerzeichen
@thecain danke und wo müsste ich die einsetzen? vor der ersten eckigen klammer und nach dem Stern für unendlich oft?
das {1} könnte man ja aber auch weglassen, weil der default sowieso 1x ist, oder?
und ja dachte mir auch, warum sollte das durchgehen
Zumindest auf der Webseite, auf der ich meine Regex entwickle, geht es durch: https://regex101.com/r/sK7aC1/1 Mit Java selbst hab ich das nicht getestet.
Wie sich aber hier herausstellte, besteht in Java ein definitiver Unterschied zwischen .matches() und .find(). Wieder was dazugelernt
Regular Expressions waren ursprünglich zum herausfiltern von Informationen aus größeren Text/Datenmengen gedacht; dass man damit auch wunderbar Eingaben validieren kann ist ein schönes Nebenprodukt. Durch mehrere Aufrufe von Matcher#find wird der Eingabestring nach Treffern für die Regex durchsucht. Das ermöglicht es, die verschiedenen Treffer in einer Eingabemenge zu durchlaufen und zu verarbeiten.
Ich kann mir gut vorstellen, dass Matcher#matches so implementiert ist, wie @tecain es beschreibt.