Сегодня я столкнулся с этой же проблемой и нашел простое решение для CSV-файлов: добавление дополнительного поля, содержащего только один пробел во время выполнения разбиения:
(line + ", ").split(",");
Таким образом, независимо от того, сколько последовательных пустых полей может существовать в конце файла CSV, split () всегда будет возвращать n + 1 полей
Пример сеанса (с использованием bsh)
bsh % line = "H,\"TestItems_20100107.csv\",07/01/2010,20:00:00,\"TT1198\",\"MOBb\",\"AMD\",NEW,,
bsh % System.out.println(line);
H,"TestItems_20100107.csv",07/01/2010,20:00:00,"TT1198","MOBb","AMD",NEW,,
bsh % String[] items = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
bsh % System.out.println(items.length);
8
bsh % items = (line + ", ").split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
bsh % System.out.println(items.length - 1 );
10
bsh %