До Java 8, когда мы разделяем на пустую строку, как
String[] tokens = "abc".split("");
механизм расщепления расколется в местах, отмеченных |
|a|b|c|
потому что пустое пространство "" существует до и после каждого символа. Так что в результате он сначала сгенерирует этот массив
["", "a", "b", "c", ""]
и позже удалит завершающие пустые строки (потому что мы явно не предоставили отрицательное значение для limit аргумента), поэтому он, наконец, вернет
["", "a", "b", "c"]
В Java 8 механизм разделения, похоже, изменился. Теперь, когда мы используем
"abc".split("")
мы получим массив ["a", "b", "c"] вместо ["", "a", "b", "c"] поэтому, похоже, пустые строки при запуске также удаляются. Но эта теория не работает, потому что, например,
"abc".split("a")
возвращает массив с пустой строкой в начале ["", "bc"].
Может кто-нибудь объяснить, что здесь происходит и как изменились правила разделения в Java 8?