Метод 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.