StringSplitter
String.split(String) has surprising behavior

Severity
WARNING
Has Fix?
REQUIRES_HUMAN_ATTENTION

The problem

String.split(String) has surprising behaviour. For example, consider the following puzzler from http://konigsberg.blogspot.com/2009/11/final-thoughts-java-puzzler-splitting.html:

String[] nothing = "".split(":");
String[] bunchOfNothing = ":".split(":");

The result is [""] and []!

More examples:

input input.split(":") Splitter.on(':').split(input)
"" [""] [""]
":" [] ["", ""]
":::" [] ["", "", "", ""]
"a:::" ["a"] ["a", "", "", ""]
":::b" ["", "", "", "b"] ["", "", "", "b"]

Prefer either:

TIP: if you use Splitter, consider extracting the instance to a static final field.

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("StringSplitter") to the enclosing element.