Исключение нулевого указателя. Не хотите добавлять пустые строки в список из файла - PullRequest
0 голосов
/ 07 марта 2012

При добавлении строк текстового файла в список, я не хочу добавлять пустые строки в список.Я пробовал это, но не работает:

Scanner s=new Scanner(new File(text.txt));
List <String> names=new ArrayList<String>();
while(s.hasNext()){
if (s.nextLine()!=null){
names.add(s.nextLine());
}}

Мой текстовый файл выглядит так:

name1   erer    | 26-08-1988

name2 rerer   | 13-07-1988       

name3  erer    | 14-07-1988   

name4  weww |   13-07-2001   
name5 ewew | 18-10-1987   

Ответы [ 6 ]

5 голосов
/ 07 марта 2012
Scanner s=new Scanner(new File("text.txt"));
List <String> names=new ArrayList<String>();
String line = "";
while(s.hasNext()){
    if ((line = s.nextLine())!=null && !line.isEmpty()){
        names.add(line);
    }
}

Проверяет, есть ли у сканера входные данные и не пусто ли

2 голосов
/ 07 марта 2012

Вы пропускаете строку каждый раз (двойной вызов nextLine() в каждой итерации), должно быть:

String line;
if ((line=s.nextLine())!=null && !line.trim().equals("")){
    names.add(line);
}

или даже:

if (!"".equals(line=s.nextLine()))

Код отредактирован для отражения (правильных) комментариев.

1 голос
/ 07 марта 2012

Вы дважды звоните s.nextLine(), вместо этого вы можете сделать это:

String line = s.nextLine();
if (line != null) {
   names.add(line);
}
0 голосов
/ 07 марта 2012

Ваш NPE вызывается 2 вызовами nextLine () каждую итерацию, но проверяется только первый вызов, если hasNext ().

Решение будет таким:

Scanner s=new Scanner(new File("text.txt"));
List <String> names=new ArrayList<String>();
String line = null;
while(s.hasNext()){
    if ((line = s.nextLine())!=null && !line.trim().isEmpty()){
    // .trim() removes whire spaces at the beginning and at the end of the string
        names.add(line);
    }
}
0 голосов
/ 07 марта 2012

Я думаю, вы хотите это:

String line;
if (((line = s.nextLine()) != null) && !"".equals(line.trim()) {
    names.add(line);
}
0 голосов
/ 07 марта 2012

1) Когда вы проверяете s.nextLine() != null, что вы потребляете строку, лучше сначала сохранить ее в переменной 2) Убедитесь, что переменная не пустая (например, длина == 0 или все пробелы, табуляции и т. Д.)

...