The split() method uses a regex to specify the delimiter -- not what you are looking for. So, if what you are looking for is neatly separated by delimters, then it will work.
I recommend that you uses the find() method, in a loop. And use regex groups to extract the items in the brackets.
But to answer why you are getting what you are getting... The delimiter is...
\\[* -- Zero or more occurances of the open square brace. [^\\]] -- One character that is *not* a close brace. \\] -- One character that is a close brace.
In most cases, the first part is zero characters. And the second and third part, uses one close brace, and one letter before it, as a delimiters. This is why most of your items are merely missing the close brace, and one letter before it.
The best you could do with split() is split on " " and get an array of all your items but with the enclosing brackets as well. Use the Scanner object to do it.