Wie man einen String in Java teilt: Vollständiger Leitfaden für Anfänger und Profis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

„Hilfe, ich kann keinen String teilen!“ – Die Geschichte eines Problems

\n\n

Stellen 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\n

In 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!

\n\n

Die Methode split(): Ihr wichtigstes Werkzeug

\n\n

Die Klasse String in Java bietet zwei überladene Varianten der Methode split():

\n\n
public String[] split(String regex)\npublic String[] split(String regex, int limit)
\n\n

Die 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\n

Basisbeispiel: Teilen nach Leerzeichen

\n\n
public 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\n

Ausgabe:

\n
Java\nteilt\nStrings\neinfach
\n\n

Funktioniert? Funktioniert. Aber was, wenn Sie mehrere aufeinanderfolgende Leerzeichen haben? Dann landen leere Strings im Array. Unangenehm, oder?

\n\n

Einen String in Java nach Komma teilen (CSV)

\n\n

Eine der häufigsten Aufgaben ist es, einen String in Java nach Komma zu teilen. Angenommen, Sie haben einen CSV-String:

\n\n
String 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\n

Ausgabe:

\n
Apfel\nBirne\nBanane\nOrange
\n\n

Beachten 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.

\n\n

Reguläre Ausdrücke: Magie und Schmerz

\n\n

Die Methode split() akzeptiert einen regulären Ausdruck. Das bietet enorme Flexibilität, erfordert aber Sorgfalt. Betrachten wir gängige Szenarien.

\n\n

Teilen nach Punkt

\n\n

Mö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.

\n\n

Die richtige Lösung ist, den Punkt zu maskieren:

\n\n
String 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\n

Merken 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.

\n\n

Teilen nach mehreren Trennzeichen

\n\n

Was tun, wenn ein String sowohl Kommas als auch Semikolons und Leerzeichen enthält? Verwenden Sie eine Zeichenklasse in eckigen Klammern:

\n\n
String 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\n

Das Zeichen + bedeutet „eins oder mehr“ – dies stellt sicher, dass eine Folge von Trennzeichen nicht zu

Blogs

Buchempfehlungen