split(delimiter)
Standardmäßig werden nachfolgende leere Zeichenfolgen aus dem Ergebnisarray entfernt. Um diesen Mechanismus deaktivieren wir überladene Version von verwenden müssen , um split(delimiter, limit)
mit limit
wie zu negativen Wert gesetzt
String[] split = data.split("\\|", -1);
Wenig mehr Details:
split(regex)
Gibt intern das Ergebnis von zurück split(regex, 0)
und in der Dokumentation dieser Methode finden Sie (Hervorhebung von mir)
Der limit
Parameter steuert, wie oft das Muster angewendet wird, und wirkt sich daher auf die Länge des resultierenden Arrays aus.
Wenn die Grenze n
ist , größer als Null ist, dann wird das Muster höchstens n angewendet werden - 1 mal, wird das Array Länge nicht größer als n sein, und der letzte Eintrag des Arrays werden alle Eingaben über die letzte angepaßten Begrenzungszeichen enthalten.
Wenn n
ist nicht positiv , dann wird das Muster so oft wie möglich angewendet werden , und die Anordnung eine beliebige Länge haben kann.
Wenn n
heißt Null , dann wird das Muster so oft wie möglich angewendet werden, kann das Array eine beliebige Länge haben, und leere Strings Hinter werden verworfen .
Ausnahme :
Es ist erwähnenswert, dass das Entfernen von nachgestellten leeren Zeichenfolgen nur dann sinnvoll ist , wenn solche leeren Zeichenfolgen durch einen Teilungsmechanismus erstellt wurden . Also für "".split(anything)
da wir nicht teilen können ""
weiter werden wir als Ergebnis erhalten [""]
Array.
Dies geschieht, weil hier keine Aufteilung stattgefunden hat. ""
Obwohl dies leer ist und das Nachlaufen die ursprüngliche Zeichenfolge darstellt, handelt es sich nicht um eine leere Zeichenfolge, die durch den Aufteilungsprozess erstellt wurde.
data.split("\\|", 8)
split("\\|", 8)
da dies auf die ersten acht Token beschränkt ist! Wenn Ihre Zeichenfolge variabel ist, sollten Sie sie verwendensplit("\\|", -1)
, damit eine unbegrenzte Anzahl von Token erstellt wird und am Ende keine leeren Token verworfen werden.split(regex)
. Sie sind hier gelandet und haben herausgefunden, dass es nicht so ist.Aus der Dokumentation von
String.split(String regex)
:Sie müssen also die Version
String.split(String regex, int limit)
mit zwei Argumenten mit einem negativen Wert verwenden:Doc:
Dadurch werden keine leeren Elemente ausgelassen, einschließlich der nachfolgenden.
quelle
Aus dem String.split () API-Dokument :
Überladene String.split (Regex, Int) ist für Ihren Fall besser geeignet.
quelle
String[] split = data.split("\\|",-1);
Dies ist nicht immer die eigentliche Anforderung. Der Nachteil von oben ist unten gezeigt:
Wenn Daten fehlen:
Die tatsächliche Anforderung ist, dass die Länge 7 betragen sollte, obwohl Daten fehlen. Weil es Fälle gibt, in denen ich in eine Datenbank oder etwas anderes einfügen muss. Wir können dies erreichen, indem wir den folgenden Ansatz verwenden.
Was ich hier getan habe ist, ich entferne "|" Rohr am Ende und dann den String teilen. Wenn Sie "," als Trennzeichen haben, müssen Sie ", $" in replaceAll hinzufügen.
quelle
Möglicherweise haben Sie mehrere Trennzeichen, einschließlich Leerzeichen, Kommas, Semikolons usw. Nehmen Sie diese in wiederholbaren Gruppen mit [] +, wie z.
Sie haben 4 Token - a, b, c, d
Führende Trennzeichen in der Quellzeichenfolge müssen entfernt werden, bevor diese Aufteilung angewendet wird.
als Antwort auf die gestellte Frage:
Leerzeichen für alle Fälle hinzugefügt, wenn Sie diese als Trennzeichen zusammen mit | haben
quelle