После некоторого просмотра документации я вижу, в чем может быть проблема.
split
принимает строку-разделитель и обрабатывает каждый символ в ней как символ-разделитель. Соседние символы разделителя рассматриваются как один, без пустых элементов массива.
splitPreserveAllTokens
делает то же самое, но соседние символы разделителя приводят к пустым элементам массива.
splitByWholeSeparator
использует всю строку-разделитель для разделения строки. Смежные строки разделителя рассматриваются как единое целое, без пустых элементов массива.
splitByWholeSeparatorPreserveAllTokens
делает то же самое, но соседние строки-разделители приводят к пустым элементам массива.
Пример:
String: "a,b,;,;e,f,,g,h"
Separator: ",;"
split: ["a","b","e","f,"g",h"]
splitPreserveAllTokens: ["a","b","","","","e","f","","g","h"]
splitByWholeSeparator: ["a,b","e,f,,g,h"]
splitByWholeSeparatorPreserveAllTokens: ["a,b","","e,f,,g,h"]