Hilfe bei Pattern

SteeL1942

Aktives Mitglied
Habe mich mal ein wenig mit pattern auseinander gesetzt, aber als ich jetzt versucht habe, mit einem zu arbeiten ist das natürlich mal wieder in die hose gegangen 🙁

Ich möchte aus einem String gewisse Teile herausfiltern und anschließend in geänderter Reihenfolge wieder in den String schreiben.
Meine Methode sieht so aus:

Java:
private void DatenFilter()
	{
		String Test = "311045,99-Crabman-021,958,946,356181,10438,0";
		Pattern pat = Pattern.compile("(\\d+),\\.+,(\\d+)\\,(\\d+),\\.+",Pattern.CASE_INSENSITIVE);
		
	     Matcher mat = pat.matcher(Test);
	     Test = mat.group(2)+mat.group(3)+" "+mat.group(1);
	     System.out.println(Test);
	}

Es war eigendlich so gedacht, dass in der ersten Gruppe die 311045 steht, in der zweiten die 958 und in der dritten die 946.
Der neue String sollte dann so aussehen:
958946 311045


Das passiert natürlich nicht. Er gibt nen Fehler aus, dass der Matcher nicht fündig geworden ist 🙁
Daher vermute ich, dass der Pattern falsch ist. Könnte da mal wer drüber gucken und mir sagen, was daran falsch ist (ich hoffe nicht alles 😉 )

danke schon mal im vorraus
 
Du darfst die Punkte nicht escapen bzw. willst das in dem Fall nicht. Kommata auch nicht so weit ich mich erinnere. So sollte es klappen:
Code:
"(\\d+),.+,(\\d+),(\\d+),.+"
 
Du darfst die Punkte nicht escapen bzw. willst das in dem Fall nicht. Kommata auch nicht so weit ich mich erinnere. So sollte es klappen:
Code:
"(\\d+),.+,(\\d+),(\\d+),.+"

Joa das würde in der Tat mehr Sinn machen, allerdings erhalte ich nach wie vor den gleichen Fehler 🙁

hab es auch nochmal mit diesen versucht, aber auch fehlanzeige

Code:
"(\\d+),.+,(\\d+),(\\d+),.+,.+,0"
Code:
"(\\d+),.+,(\\d+),(\\d+),d+,d+,0"
 
Was man auch machen könnte, wenn die Struktur immer so mit den kommas aussieht.

Den String nach den Kommas splitten, dann durch die einzelnen Wörter iterieren und mit dem Pattern für Zahlen herausfiltern und in eine List packen.
Anschliessend kann man die Elemente aus List mit geeignetem get wie bei "group" nacheinander zurückgeben .

Das problem ist aber folgendes:
Java:
Pattern pattern1 = Pattern.compile("(\\d+)");
Matcher matcher1 = pattern1.matcher("12-ABC-312");
while (matcher1.find()) {
	System.out.println(matcher1.start());
}

mit (\\d+) findet er zuerst die 12 und dann die 312

man müsste hier für jedes Wort folgendes machen

1. toCharArray
2. darüber iterieren
3. Character.isDigit(char) abfragen - falls nicht dann return false und das Wort enthält nicht nur Zahlen.


@EDIT

ich habe es so getestet:

Java:
Pattern pattern1 = Pattern.compile("(\\d+),.+,(\\d+),(\\d+),.+,.+,0");
		Matcher matcher1 = pattern1.matcher("311045,99-Crabman-021,958,946,356181,10438,0");
		
		while (matcher1.find()) {
			System.out.println(matcher1.start()); // start des gesuchten Strings
			System.out.println(matcher1.end()); // ende des gesuchten Strings
			System.out.println("311045,99-Crabman-021,958,946,356181,10438,0".length()); // die String Länge
		}

Ausgabe:
0
44
44

das heisst dass er das ganze gefunden hat !!!

und das liefert auch akzeptables Ergebnis

Java:
Pattern pattern1 = Pattern.compile("(\\d+),.+,(\\d+),(\\d+),.+,.+,0");
		Matcher matcher1 = pattern1.matcher("311045,99-Crabman-021,958,946,356181,10438,0");
		
		while (matcher1.find()) {
			System.out.println( matcher1.group(1));
			System.out.println( matcher1.group(2));
			System.out.println( matcher1.group(3));
		}

nähmlich:

311045
958
946

daraus folgt => du hast matcher1.find() bzw. wie bei dir mat.find() vergessen !!!!
Logischerweise muss erst was gefunden werden um es zu grupieren 😉
 
Zuletzt bearbeitet:

Zurück
Oben