Split – Einen String mit der Pipe | spalten?

Strings splitten mit der Pipe, was dabei in Java zu beachten ist um nicht fehlerhaft aufzutrennen wurde in diesem Artikel erklärt. String#split im Detail bzw. wie der Compiler dabei mit der Regex umgeht wird ebenfalls beschrieben.

In Java einen String spalten ist keine große Hexerei, die String Klasse selbst liefert die dafür vorgesehene Funktionalität frei haus:

String#split(String seperator)

Ich hab bewusst nicht den selben Bezeichner für den Parameter gewählt wie in der API angeschrieben, denn das ist der flotte Blick den Programmierer auf diese Methode zu haben scheinen. Man gibt einen Seperator an und der String wird entsprechend aufgesplittet

String s = "Franz,Heinz,Sepp,Josef,Martin,Lukas,Jonas,Holger,Alexander";

Diesen String würde man zB folgendermaßen in die einzelnen Vornamen aufsplitten:

String[] vornamen = s.split(",");

Funktioniert einwandfrei, was jedoch wenn die Vornamen wie folgt aufbereitet sind:

String p = "Franz|Heinz|Sepp|Josef|Martin|Lukas|Jonas|Holger|Alexander";

Geht man hier nach obrigem Schema vor

String[] vornamen_pipe = p.split("|");

Splittet er den String nach jedem einzelnen Zeichen. Warum? Der eigentliche Funktionsaufruf den wir hierbei durchführen ist String#split(String Regex). In einer Regular Expression steht die Pipe für „oder“. In diesem speziellen Fall ist also der Befehl: Teile den String p bei null oder null. Mehr über Regular Expressions gibts z.B. hier

Man muss sich hierbei mit einem Escape Zeichen helfen, damit die Regular Expression die Pipe als Zeichen wertet und nicht als Syntax. Dies wäre mit dem Backslash zu erreichen:

\|

Damit wird in der Regular Expression nach einer Pipe gesucht. Würden wir die Regex zB über eine Konsole abfragen wären wir hier fertig. Da wir diese jedoch mit in den Code compilieren schreitet zuerst der Java Compiler ein und Übersetzt für sich dass hier eine Pipe gemeint ist, sprich \| wird für ihn zu | – diese wird dann erst als Regex ausgewertet und wir laufen in den selben Fehler wie zuvor, daher müssen wir auch noch den Backslash escapen:

String[]vornamen_pipe_ok = p.split("\\|");

Und schon erfolgt der Split wie gewünscht.

Happy splitting

Ähnliche Artikel: