До 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?