It splits on every "\\S"
which in regex engine represents \S
non-whitespace character.
So lets try to split "x x"
on non-whitespace (\S
). Since this regex can be matched by one character lets iterate over them to mark places of split (we will use pipe |
for that).
- is
'x'
non-whitespace? YES, so lets mark it | x
- is
' '
non-whitespace? NO, so we leave it as is
- is last
'x'
non-whitespace? YES, so lets mark it | |
So as result we need to split our string at start and at end which initially gives us result array
["", " ", ""]
^ ^ - here we split
But since trailing empty strings are removed, result would be
[""," "] <- result
,""] <- removed trailing empty string
so split returns array ["", " "]
which contains only two elements.
BTW. To turn off removing last empty strings you need to use split(regex,limit)
with negative value of limit like split("\\S",-1)
.
Now lets get back to your example. In case of your data you are splitting on each of
I am preparing for OCPJP
| || ||||||||| ||| |||||
which means
""|" "|""|" "|""|""|""|""|""|""|""|""|" "|""|""|" "|""|""|""|""|""
So this represents this array
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
but since trailing empty strings ""
are removed (if their existence was caused by split - more info at: Confusing output from String.split)
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
^^ ^^ ^^ ^^ ^^
you are getting as result array which contains only this part:
[""," ",""," ","","","","","","","",""," ","",""," "]
which are exactly 16 elements.
Pattern
. – Guarneri\\S
becomes\S
in the regex engine, which is a metachar for "non-whitespace char" – SuperpositionSystem.out.println(Arrays.toString(tokens));
and you'll see what it splited – AnemologyI am preparing
? I wonder why someone even did a down vote as well!!!? – Floris