Метод split() Java разбивает пустые строки в конце?

Ознакомьтесь с приведенной ниже программой.

try {
    for (String data : Files.readAllLines(Paths.get("D:/sample.txt"))){
        String[] de = data.split(";");
        System.out.println("Length = " + de.length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Sample.txt:

1;2;3;4
A;B;;
a;b;c;

Вывод:

Length = 4
Length = 2
Length = 3

Почему второй и третий выходы дают 2 и 3 вместо 4. В файле sample.txt условие для 2-й и 3-й строк должно давать новую строку (\n или вводить) сразу после предоставления разделителя для третьего поля. Может ли кто-нибудь помочь мне получить длину как 4 для 2-й и 3-й строк без изменения состояния файла sample.txt и как распечатать значения de[2] (throws ArrayIndexOutOfBoundsException)?

Ответ 1

Вы можете указать, чтобы применить шаблон как можно чаще:

String[] de = data.split(";", -1);

См. Javadoc для метода split, который содержит два аргумента для деталей.

Ответ 2

посмотрите docs, здесь важная цитата:

[...] the array can have any length, and trailing empty strings will be discarded.

Если вам это не нравится, взгляните на комментарий Фабиана. При вызове String.split(String) он вызывает String.split(String, 0) и отбрасывает завершающие пустые строки (как говорят документы), при вызове String.split(String, n) с n < 0 он ничего не отбрасывает.