Метод split строки Java игнорирует пустые подстроки

это произошло со мной сегодня поведение java String.split() - Это очень странно.

На самом деле я хочу разделить строку "aa,bb,cc,dd,,,ee" в массиве по .split(",") это дает мне массив строк ["aa","bb","cc","dd","","","ee"] длины 7.

но когда я пытаюсь разделить строку "aa,bb,cc,dd,,,," для массива это дает мне массив длины 4 означает только ["aa","bb","cc","dd"] отклонение всех следующих пустых строк.

Я хочу процедуру, которая разбивает строку, как "aa,bb,cc,dd,,,," в массиве ["aa","bb","cc","dd","","",""].

возможно ли это с помощью Ява.ленг.Строка api? Спасибо заранее.

2 ответов


использовать String.split(String regex, int limit) с отрицательным лимитом (например, -1).

"aa,bb,cc,dd,,,,".split(",", -1)

, когда String.split(String regex) называется, называется с limit = 0, который удалит все конечные пустые строки в массиве (в большинстве случаев см. ниже).

фактическое поведение String.split(String regex) это совершенно не смущает:

  • разделение пустой строки приведет к массиву длины 1. пустое разделение строк всегда приведет к длине 1 массива, содержащего пустая строка.
  • разделение ";" или ";;;" С regex будучи ";" приведет к пустому массиву. непустое разделение строк приведет к удалению всех завершающих пустых строк в массиве.

поведение выше можно наблюдать, по крайней мере, от Java 5 до Java 8.

была попытка изменить поведение, чтобы вернуть пустой массив при разбиении пустой строки в JDK-6559590. Однако вскоре был возвращен в JDK-8028321 когда он вызывает регрессию в разных местах. Изменение никогда не попадает в начальный выпуск Java 8.


можно использовать public String[] split(String regex, int limit):

на