Frage zur split() Methode in Java?

... komplette Frage anzeigen

5 Antworten

Wie die anderen bereits geschrieben haben, ist split() nicht sonderlich geeignet dafür.

Aaaaber:

Du kannst bei split() ein zweites optionales Argument angeben, welches die maximale Anzahl der Teile angibt. Durch diesen Trick, können in deiner CSV Datei im dritten Feld beliebig viele Kommas vorkommen.

Beispiel:

String line = "12.06.16, 5, Hallo, Tschüss!";
String parts[] = line.split(",", 3);

for (String part : parts) {
System.out.println(part.trim());
}

Das gibt dann folgende Ausgabe:

12.06.16
5
Hallo, Tschüss!

Siehe dazu auch die entsprechenden API Docs:

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-

Viel Spaß noch! ;)

PS: Denke am besten wirklich noch mal drüber nach, ob eine richtige CSV-Bibliothek nicht die bessere Wahl ist!

PPS: Deine Eingangsdaten sind übrigens keine korrekt formatierten CSV-Daten, da das Komma zwischen "Hallo" und "Tschüss" nicht escaped ist!

Selbst eine vernünftige CSV-Bibliothek hätte damit auch ihre Probleme!

Antwort bewerten Vielen Dank für Deine Bewertung

Nun ja, irgendetwas stört mich hierbei.

dein String sieht so aus:

"12.06.16, 5, Hallo, Tschüss"

richtig? - Wenn du nun über das Komma splittest, erhälst du eine Array aus:

12.06.16
5
Hallo
Tschüss

Also wenn ich den String betrachte, sehe ich hier 4 Spalten, die aus einer CSV Datei stammen und split passt wunderbar.

Wenn du natürlich im vornherein weißt, was wo stehen muss, kannst du mit Regular-Expressions arbeiten um es mal in Pseudocode auszudrücken:

Suchkriterium:

Datumswert  - Komma - Zahl - Komma - Text
Antwort bewerten Vielen Dank für Deine Bewertung

"Hallo,Tschüss" in einer Zeile steht. Wenn ich das also splitte, bekomme ich nur " "Hallo " raus..

Unklar, was du meinst. Wenn du das am Komma splittest, bekommst du nicht nur "Hallo" raus.

Splitten ist jedenfalls für das CSV Parsing ungeeignet, wenn es die Spezifikation einhalten soll. Denn vermeintliche Trennzeichen in Strings werden auch als Trennzeichen angesehen. Und dann zerteilst du deinen String.


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Trachom
02.07.2016, 17:12

Ja, aber "Hallo" und "Tschüss" stehen in der Zeile 3, also in einer Zeile, woraus Java dann " "Hallo " macht, wenn ich es auslesen möchte..

0

so sieht eine Zeile dann ungefähr aus:

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?