„Hilfe, ich kann keinen String teilen!“ – Die Geschichte eines Problems
\n\nStellen Sie sich vor: Sie schreiben in Java einen Log-Parser, verarbeiten eine CSV-Datei oder möchten einfach nur eine Benutzereingabe in Wörter aufteilen. Und dann – Stopp. Wie macht man das? Wenn Sie jemals „How do I split a string in Java“ gegoogelt haben, dann wissen Sie: Diese Frage auf Stack Overflow hat Hunderttausende von Aufrufen gesammelt. Nicht, weil Java-Programmierer faul sind, sondern weil split() ein mächtiges Werkzeug ist, aber mit Tücken.
\n\nIn diesem Artikel werden wir das Teilen von Strings in Java von A bis Z behandeln. Sie erfahren, wie die Methode split() funktioniert, welche Überraschungen reguläre Ausdrücke bereithalten und wie Sie nicht in die Fallen tappen, die auf jeden zweiten Anfänger warten. Los geht‘s!
Die Methode split(): Ihr wichtigstes Werkzeug
\n\nDie Klasse String in Java bietet zwei überladene Varianten der Methode split():
public String[] split(String regex)\npublic String[] split(String regex, int limit)\n\nDie erste Variante akzeptiert einen regulären Ausdruck und gibt ein Array von Strings zurück. Die zweite macht dasselbe, jedoch mit einer Begrenzung der Anzahl der Teile. Klingt einfach? Schauen wir uns Beispiele an.
\n\nBasisbeispiel: Teilen nach Leerzeichen
\n\npublic class SplitExample {\n public static void main(String[] args) {\n String text = "Java teilt Strings einfach";\n String[] words = text.split(" ");\n \n for (String word : words) {\n System.out.println(word);\n }\n }\n}\n\nAusgabe:
\nJava\nteilt\nStrings\neinfach\n\nFunktioniert? Funktioniert. Aber was, wenn Sie mehrere aufeinanderfolgende Leerzeichen haben? Dann landen leere Strings im Array. Unangenehm, oder?
\n\nEinen String in Java nach Komma teilen (CSV)
\n\nEine der häufigsten Aufgaben ist es, einen String in Java nach Komma zu teilen. Angenommen, Sie haben einen CSV-String:
\n\nString csv = "Apfel,Birne,Banane,Orange";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n System.out.println(fruit.trim()); // trim() entfernt überflüssige Leerzeichen\n}\n\nAusgabe:
\nApfel\nBirne\nBanane\nOrange\n\nBeachten Sie: Wir haben trim() hinzugefügt, weil in echten Daten nach dem Komma oft Leerzeichen stehen. Ohne dies erhalten Sie " Apfel" mit einem führenden Leerzeichen – und dann werden Sie sich wundern, warum die Strings nicht übereinstimmen.
Reguläre Ausdrücke: Magie und Schmerz
\n\nDie Methode split() akzeptiert einen regulären Ausdruck. Das bietet enorme Flexibilität, erfordert aber Sorgfalt. Betrachten wir gängige Szenarien.
Teilen nach Punkt
\n\nMöchten Sie eine IP-Adresse "192.168.1.1" aufteilen? Der naive Code str.split(".") wird nicht funktionieren. Warum? Weil der Punkt in regulären Ausdrücken ein Sonderzeichen ist, das „jedes beliebige Zeichen“ bedeutet. Als Ergebnis erhalten Sie ein Array aus leeren Strings.
Die richtige Lösung ist, den Punkt zu maskieren:
\n\nString ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // Doppelter Backslash!\n\nfor (String part : parts) {\n System.out.println(part);\n}\n// Ausgabe: 192 168 1 1\n\nMerken Sie sich: In Java wird für die Maskierung in regulären Ausdrücken ein doppelter Backslash \\\\ verwendet. Ein einzelner \\ ist ein Steuerzeichen für den String, ein doppelter bereits für den Regex.
Teilen nach mehreren Trennzeichen
\n\nWas tun, wenn ein String sowohl Kommas als auch Semikolons und Leerzeichen enthält? Verwenden Sie eine Zeichenklasse in eckigen Klammern:
\n\nString messy = "Apfel;Birne,Banane Orange";\nString[] items = messy.split("[;,\\\\s]+"); // ; oder , oder Leerzeichen\n\nfor (String item : items) {\n System.out.println(item);\n}\n// Ausgabe: Apfel Birne Banane Orange\n\nDas Zeichen + bedeutet „eins oder mehr“ – dies stellt sicher, dass eine Folge von Trennzeichen nicht zu