StringSplitter
String.split(String) has surprising behavior

Severity
WARNING

The problem

String.split(String) and Pattern.split(CharSequence) have 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(":") | Pattern.compile(":").split(input) | Splitter.on(‘:’).split(input) -------- | ------------------- | ---------------------------------- | ------------------------------- ”” | [””] | [””] | [””] ”:” | [] | [] | [””, “”] ”:::” | [] | [] | [””, “”, “”, “”] “a:::” | [“a”] | [“a”] | [“a”, “”, “”, “”] ”:::b” | [””, “”, “”, “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.