Dieses split
Verhalten wird von Java geerbt, egal ob gut oder schlecht ...
Scala überschreibt die Definition des String
Grundelements nicht.
Beachten Sie, dass Sie das limit
Argument verwenden können, um das Verhalten zu ändern :
Der Parameter limit steuert, wie oft das Muster angewendet wird, und wirkt sich daher auf die Länge des resultierenden Arrays aus. Wenn der Grenzwert n größer als Null ist, wird das Muster höchstens n - 1 Mal angewendet, die Länge des Arrays ist nicht größer als n, und der letzte Eintrag des Arrays enthält alle Eingaben über das zuletzt übereinstimmende Trennzeichen hinaus. Wenn n nicht positiv ist, wird das Muster so oft wie möglich angewendet und das Array kann eine beliebige Länge haben. Wenn n Null ist, wird das Muster so oft wie möglich angewendet, das Array kann eine beliebige Länge haben und nachfolgende leere Zeichenfolgen werden verworfen.
dh Sie können festlegen limit=-1
, dass das Verhalten (aller?) anderer Sprachen ermittelt wird:
@ ",a,,b,,".split(",")
res1: Array[String] = Array("", "a", "", "b")
@ ",a,,b,,".split(",", -1) // limit=-1
res2: Array[String] = Array("", "a", "", "b", "", "")
Es scheint bekannt zu sein, dass das Java-Verhalten ziemlich verwirrend ist, aber:
Das obige Verhalten kann von mindestens Java 5 bis Java 8 beobachtet werden.
Es wurde versucht, das Verhalten so zu ändern, dass beim Teilen einer leeren Zeichenfolge in JDK-6559590 ein leeres Array zurückgegeben wird . Es wurde jedoch bald in JDK-8028321 zurückgesetzt, wenn es an verschiedenen Stellen eine Regression verursacht. Die Änderung schafft es nie in die erste Java 8-Version.
Hinweis: Die Split-Methode war von Anfang an nicht in Java ( nicht in 1.0.2 ), sondern tatsächlich ab mindestens 1.4 (siehe z. B. JSR51 um 2002). Ich untersuche immer noch ...
Was unklar ist, ist, warum Java dies überhaupt gewählt hat (mein Verdacht ist, dass es ursprünglich ein Versehen / Fehler in einem "Randfall" war), aber jetzt unwiderruflich in die Sprache eingebrannt und so bleibt es .