2 Stimmen

Zeichenfolge mit Regex aufteilen

Ich versuche, split() zu benutzen, um diese Ausgabe zu erhalten:

Colour = "Rot/Weiß/Blau/Grün/Gelb/"
Colour = "Orange"

...aber es ist mir nicht gelungen. Was mache ich falsch?

Grundsätzlich suche ich nach dem letzten / und teile den String dort auf.

String pattern = "[\\/]$";
String colours = "Rot/Weiß/Blau/Grün/Gelb/Orange";

Pattern splitter = Pattern.compile(pattern);
String[] result = splitter.split(colours);

for (String colour : result) {
    System.out.println("Colour = \"" + colour + "\"");
}

3voto

codaddict Punkte 426877

Sie müssen den String am letzten / aufteilen. Das Regex, um das letzte / zu finden, lautet:

/(?!.*/)

Auf IdeOne ansehen

Erklärung:

/       : Ein /-Zeichen
(?!.*/) : Negative lookahead-Assertion. Das oben genannte / wird nur 
          gefunden, wenn es nicht von einem anderen / gefolgt wird. Es passt also nur zum letzten /

1voto

Ted Hopp Punkte 227177

Wie wäre es mit:

int ix = colours.lastIndexOf('/') + 1;
String[] result = { colours.substring(0, ix), colours.substring(ix) };

(EDIT: korrigiert, um das abschließende / am Ende des ersten Strings einzuschließen.)

1voto

Mohamed Mansour Punkte 38017

Ihr Muster ist falsch, Sie haben das $ platziert, das besagt, dass es muss mit einem / enden, entfernen Sie $ und es sollte funktionieren.

Wenn wir schon dabei sind, könnten Sie einfach die String.split verwenden

String colours = "Rot/Weiß/Blau/Grün/Gelb/Orange";
String[] result = colours.split("\\/");

for (String colour : result) {
    System.out.println("Farbe = \"" + colour + "\"");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X