How-to API nicht designen: String.split(String pattern)
schneidet per default leere Strings am Ende des Ergebnis-Arrays weg (und nur da):
var arr = "a.b.".split("\\."); // ["a", "b"]
Dieses Verhalten alleine produziert schon Bugs (tatsächlich habe ich dadurch einen gefunden, der seit ~3 Jahren unbemerkt war).
Es wird aber noch besser! Wenn man das nicht will, also wenn man will, dass es sich so wie in jeder anderen Sprache verhält, muss man eine Überladung verwenden, die einen limit
-Parameter hat. Warum limit
? Na das ist die maximale Anzahl an Tokens für einen Match:
If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero [Anm. d. Red.: default] then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.
Das intuitive Verhalten wäre also:
var arr = "a.b.".split("\\.", -1); // ["a", "b", ""]