String.split() игнорирует пустые значения между разделителями, если в последней части строки
Дана следующая строка:
String s ="12/15|22:58:25|B|99.502||||A|100.501|||||";
я звоню
int len = s.split("\\|").length;
В любом случае длина 9, а не 13, как должно быть.
Тем не менее, если я изменю указанную строку следующим образом:
String s ="12/15|22:58:25|B|99.502||||A|100.501|||lol||";
Длина 13! Почему? Просто кажется, что Java делает какую-то оптимизацию, которая не требуется, так как эти части строки могут быть заполнены в каком-то другом контексте...
1 ответ
По умолчанию split
удаляет пустые завершающие строки из массива результатов. Чтобы отключить этот механизм, используйте split(regex, limit)
с отрицательным пределом, как
split("\\|",-1)
Немного подробнее:split(regex)
внутренне возвращает результат split(regex, 0)
и в документации этого метода вы можете найти (выделение мое)
limit
Параметр контролирует количество применений шаблона и, следовательно, влияет на длину результирующего массива.Если предел
n
Если значение больше нуля, то шаблон будет применен не более n - 1 раз, длина массива будет не больше n, а последняя запись массива будет содержать все входные данные за пределами последнего сопоставленного разделителя.Если
n
не является положительным, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину.Если
n
Если значение равно нулю, то шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а завершающие пустые строки будут отброшены.