Ich verarbeite eine bestimmte Zeilenlesung aus einer CSV-Datei mit String.split(",")
und stelle fest, dass die letzte leere Zeichenkette nach dem letzten Trennzeichen nicht in das von der Funktion split
erstellte Array mündet.
Hier sind die Variablenwerte, die den Fehler verursachen:
%Vor% Das Array values
hat weniger als die erwartete Anzahl von Array-Einträgen. Das erzeugte Array ist:
mit einer values[4]
, die eine ArrayIndexOutOfBounds-Ausnahme auslöst.
Das Array, das ich möchte, ist:
%Vor% Eine Einschränkung: Ich lese die Ausgabe eines anderen .csv-Datei-Erstellers und möchte keine String-Begrenzer verwenden oder ein Leerzeichen an Orten ausgeben, an denen die Daten leer sind. (dh nicht wollen: toSplit = "1,Some Value,31337,Another Value, "
mit Leerzeichen am Ende.)
Ist das ein Fehler in String.split () und gibt es eine Problemumgehung / eine andere Option?
Ich habe es herausgefunden, als ich die Frage gestellt habe! Verwenden Sie stringObj.split (",", numDelimitersExpected) oder, wie @Supericy darauf hingewiesen hat, stringObj.split (",", -1) .
Laut den Android-Dokumenten über stringObj.split (Begrenzer) entspricht ein Aufruf von line.split( "," )
einem Aufruf von line.split( ",", 0 )
mit dem zweiten Argument, das sich auf limit
bezieht, wodurch die maximale Anzahl von Einträgen festgelegt und definiert wird die ' Behandlung von nachgestellten leeren Strings '. Schauen Sie sich die Dokumentation für stringObj.split (delimiter) limit == 0
Die Lösung besteht darin, einen Aufruf von split( ",", limit )
mit limit
auf die Anzahl von Array-Einträgen zu setzen, von denen Sie erwarten, dass sie zurückkommen . In meinem Fall gibt ein auf 5 gesetztes Limit das Array zurück
was genau ich wollte. Problem gelöst.
Selbst wenn Ihre toSplit
-Zeichenfolge weniger Trennzeichen hat als limit
, erzeugt ein Aufruf mit einem gesetzten limit
noch immer leere Array-Einträge bis zu limit
. Zum Beispiel mit der gleichen Eingabezeichenfolge wie in meiner Frage:
Ein Aufruf String values[] = toSplit.split( ",", 8 )
gibt das Array
Ordentlich!
Hinweis: Oracles Java String .split (Begrenzer) hat die gleiche Funktionalität wie die Android-Dokumente, die für ihre prägnantere Erklärung gewinnen. (:
Bearbeiten: Wenn @Supericy hinzugefügt wurde, würde toSplit.split( ",", -1 )
auch den nachfolgenden leeren Eintrag korrekt zurückgeben . Danke für den Zusatz!
Tags und Links string java android split string-split