2009-02-13 4 views
98

Проверьте программу ниже.Метод 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-го строка должна давать newline (\n или вводить) сразу после предоставления разделителя для третьего поля. Может ли кто-нибудь помочь мне, как получить длину как 4 для 2-й и 3-й строк без изменения состояния файла sample.txt и как распечатать значения de[2] (throws ArrayIndexOutOfBoundsException)?

+0

Хороший вопрос, но: Дублированный! И недостающая метка ответ, как принято –

ответ

22

взглянуть на 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 он ничего не отбросит.

249

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

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

See the Javadoc для метода разделенным, принимая два аргумента для деталей.

+0

Да .. Я понял .. Теперь он работает нормально. Спасибо alot .. – raja

+65

Так отметьте ответ как принято. –

+1

Это не работает – Frank