Frage von Trachom, 87

Frage zur split() Methode in Java?

Hey.. ich probiere grade, csv-dateien mit java auszulesen.. eine Zeile sieht z.b. so aus: "12.06.16, 5, Hallo, Tschüss" Das Problem dabei ist, dass "Hallo,Tschüss" in einer Zeile steht. Wenn ich das also splitte, bekomme ich nur " "Hallo " raus.. Also wie kann ich machen, dass ich unendlich viele Argumente in einer Zeile auslesen und splitten kann?

Antwort
von SergeantPinpack, 63

Am einfachsten geht es natürlich, wenn du eine Fremd-Bibliothek verwendest, z.B. https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSV...

Antwort
von Trachom, 35

so sieht eine Zeile dann ungefähr aus:

Expertenantwort
von TeeTier, Community-Experte für programmieren, 13

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

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!

Expertenantwort
von KnusperPudding, Community-Experte für Java, 40

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

Keine passende Antwort gefunden?

Fragen Sie die Community