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