split(delimiter)
по умолчанию удаляет завершающие пустые строки из массива результатов. Чтобы отключить этот механизм, нам нужно использовать перегруженную версию split(delimiter, limit)
с limit
, установленную на отрицательное значение, например
String[] split = data.split("\\|", -1);
. Немного больше деталей: split(regex)
внутренне возвращает результат split(regex, 0)
и в документации этого метода вы можете найти (выделение мое)
Параметр
limit
контролирует количество применений шаблона и, следовательно, влияет на длину результирующего массив.Если предел
n
равен больше нуля , тогда шаблон будет применен не более n - 1 раз, длина массива будет не больше n, а массив последняя запись будет содержать все входные данные за пределами последнего сопоставленного разделителя.Если
n
не является положительным, шаблон будет применяться как можно больше раз, и массив может иметь любую длину.Если
n
равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.Исключение:
Стоит отметить, что удаление пустой пустой строки имеет смысл только в том случае, если такая пустая строка создана с помощью механизма split . Поэтому для
"".split(anything)
, так как мы не можем расколоть""
, мы получим массив результатов[""]
. Это происходит потому, что split не произошло здесь, поэтому""
, несмотря на то, что он пуст, а trailing представляет оригинальную строку, а не пустую строку, которая была создана процессом разбиения.