Regex teilen, um Strings zusammenhängender Zeichen zu extrahieren

Gibt es eine Regex, die mit String.split() funktionieren würde, um einen String in zusammenhängende Zeichen zu String.split() – dh geteilt, wo sich das nächste Zeichen vom vorherigen unterscheidet?

Hier ist der Testfall:

  String regex = "your answer here"; String[] parts = "aaabbcddeee".split(regex); System.out.println(Arrays.toString(parts)); 

Erwartete Ausgabe:

 [aaa, bb, c, dd, eee] 

Obwohl der Testfall nur Buchstaben als Eingabe enthält, dient dies nur der Übersichtlichkeit; Eingabezeichen können ein beliebiges Zeichen sein.


Bitte stellen Sie keine “Umgehungen” mit Schleifen oder anderen Techniken zur Verfügung.

Die Frage ist, wie oben gezeigt, die richtige Regex für den Code zu finden – also nur mit split() und keinen anderen Methodenaufrufen. Es geht nicht darum, einen Code zu finden, der “die Aufgabe erfüllt”.

   

Es ist völlig möglich, die Regex zum Teilen in einem Schritt zu schreiben:

 "(?< =(.))(?!\\1)" 

Da Sie zwischen jeder Gruppe von gleichen Zeichen teilen möchten, müssen wir nur nach der Grenze zwischen zwei Gruppen suchen. Ich erreiche dies, indem ich einen positiven Look-Behind benutze, nur um das vorherige Zeichen zu greifen, und ein negatives Look-Ahead und eine Rückwärts-Referenz zu verwenden, um zu prüfen, ob das nächste Zeichen nicht das gleiche Zeichen ist.

Wie Sie sehen können, ist die Regex Null-Breite (nur 2 Umschau Behauptungen). Von der Regex wird kein Zeichen verbraucht.