It occured to me today the behavior of java String.split()
is very strange.
Actually I want to split a string "aa,bb,cc,dd,,,ee"
to array by .split(",")
that gives me a String array ["aa","bb","cc","dd","","","ee"]
of length 7.
But when I try to split a String "aa,bb,cc,dd,,,,"
to array this gives me a array of length 4 means only ["aa","bb","cc","dd"]
rejecting all next blank Strings.
I want a procedure that splits a String like "aa,bb,cc,dd,,,,"
to array ["aa","bb","cc","dd","","",""]
.
Is this possible with java.lang.String api? Thanks in advance.
Use String.split(String regex, int limit)
with negative limit (e.g. -1).
"aa,bb,cc,dd,,,,".split(",", -1)
When String.split(String regex)
is called, it is called with limit
= 0, which will remove all trailing empty strings in the array (in most cases, see below).
The actual behavior of String.split(String regex)
is quite confusing:
";"
or ";;;"
with regex
being ";"
will result in an empty array. Non-empty string split will result in all trailing empty strings in the array removed.The behavior above can be observed from at least Java 5 to Java 8.
There was an attempt to change the behavior to return an empty array when splitting an empty string in JDK-6559590. However, it was soon reverted in JDK-8028321 when it causes regression in various places. The change never makes it into the initial Java 8 release.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With