Regex splitten

xpecs

Mitglied
Hallo liebe Java-Freunde,

nach langem stillen Lesen bin ich nun auch da :applaus:

Ich habe ein kleines Problem und ich stehe total auf dem Schlauch..:shock:

Ich habe einen String sagen wir 7,8(0,5),9

und ich möchte mit der Splitt-Funktion ein String Array kriegen, was etwa so ausschaut

[0] 7
[1] 8 (0,5)
[2] 9

Versucht habe ich das mit einem Regex-Pattern, allerdings schneidet er mir die (0,5) immer total anders, kann mir jemand die korrekte Expression geben, damit gesplittet wird - wie beschrieben?


Viele Grüße

EDIT:

Hier stehe ich 🙁

Java:
  private static final String PATTERN = "[^(?!.*(0,5)).+$],";

0:
1:8(0,5),
2:10
 
Zuletzt bearbeitet:
Ka ob dus mit Regex machen musst, aber nach 2 min überlegen hat ich kein Bock mehr und habs so gelöst.. wenns nicht grad tausende Datensätze sind sollte es wohl ok sein xD tut zumindest was es soll

Java:
public class Main {
	public static void main(String[] args) {
		
		String term = "7,8(0,5),9(41,5),4,15,4,245(24,612)";		
		int lastIndex = 0, start = 0, pos;

		while(true)
		{
			start = term.indexOf("(", lastIndex);
			if(start == -1) break;
			
			lastIndex = term.indexOf(")", start);
			pos = term.indexOf(",", start);
	
			if(pos < lastIndex && pos > start){
				term = (term.substring(0, pos) + "." + term.substring(pos+1));
			}
		}
		
		String[] splits = term.split((","));
		
		for(String s : splits){
			s = s.replace(".", ",");
			System.out.println(s);
		}
	}
}

Ausgabe
Java:
7
8(0,5)
9(41,5)
4
15
4
245(24,612)

Grüße
 
Zuletzt bearbeitet:
Das ist ein wirklich kniffliger Fall. Das Komma ist gleichzeitig Trennzeichen für's Splitten wie auch Dezimaltrennzeichen, wenn Die Zahl in einer Klammer steht.

Wie erkennt man den Unterschied? Eine menschensprachliche Umschreibung wäre: "Wenn Du ein Komma findest, schaue im String zurück. Nutze es nur als Trennzeichen, wenn vor dem Komma nur Zahlen, also keine runde Klammer kommt."

In Regex-sprech heißt zurückschauen lookbehind und, weil etwas nicht sein soll (keine Klammer) kommt noch negative dazu. Das Feature, dass Du suchst heißt also "negative lookbehind". Schau mal, ob Du's damit selbst schaffst. Ansonsten: Wieder melden!
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben