regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden

anja1710

Neues Mitglied
Hallo liebe Community,

ich möchte gerne einen String namens text nach regulären Ausdrücken der Form von Daten dd.mm.yyyy untersuchen. Hierzu möche ich die Klasse Scanner verwenden und die gefundenen Ausdrücke sollen auf der Konsole ausgegeben werden.
Meine bisherige Lösung ist:
public static void texttoconsole(){
String text = "17.10.1996 skvuhaikv 30.06.2015 dfgs 15.07.1998";
Scanner sc = new Scanner(text);
while (sc.hasNext("(\\d{1,2}\\.){2}\\d{0,4}") == true){
System.out.println(sc.next("(\\d{1,2}\\.){2}\\d{0,4}"));
}
sc.close();
}

Das Programm läuft auch soweit, allerdings wird nur das erste Datum aus text, also 17.10.1996 auf der Konsole ausgegeben. Hat jemand eine Idee woran das liegt und kann mir helfen?
Vielen Dank schon mal im Voraus!🙂
 
Naja dir wird nur das eine Datum ausgegeben, weil es zufällerweise das erste Wort ist. Danach ist der Scanner auf dem Wort dahinter und prüft ob "skvuhaiv" deinem Regex entspricht. Das ist nicht der Fall also verlässt er die while-Schleife.

Du müsstest also, wenn das nächste Token nicht deinem Regex entspricht ein scanner.next() aufrufen, bis du am Ende deines Strings angekommen bist, damit jedes Token überprüft wird.


Für deine Zwecke wäre ein Matcher vermutlich besser geeignet:
Java:
public static void texttoconsole() {
		String text = "17.10.1996 skvuhaikv 30.06.2015 dfgs 15.07.1998";
		Pattern p = Pattern.compile("(\\d{1,2}\\.){2}\\d{0,4}");
		Matcher m = p.matcher(text);
		 while (m.find()) {
	            System.out.println(m.group(0));
	        }
	}
 
Zuletzt bearbeitet:

Zurück
Oben