2016-03-12 2 views
1

Я пытаюсь добавить CSV-таблицу в свой 2-й массив, но хочу отсортировать все пустые ячейки.Проверьте, нет ли ячейки .csv.

Это, как в настоящее время выглядит мой код:

try { 
     BufferedReader reader = new BufferedReader(new FileReader(upload.pathName)); 
     String strLine; 

     for (int i = 0; (strLine = reader.readLine()) != null; i++) { 
      Scanner scanner = new Scanner(strLine); 
      scanner.useDelimiter(";"); 
      int j = 0; 
      while (scanner.hasNext()) { 
       try { 
        if (scanner.next() == null || scanner.next().equals("")) { 
         System.out.println("this cell is empty"); 
         j++; 
        } else { 
        array[i][j] = scanner.next(); 
        j++; 
        } 
       } catch (Exception e) { 
        System.out.println(e.getMessage()); 
       } 
      } 
      scanner.close(); 
     } 
     reader.close(); 
    } catch (Exception abcdefg) { 
     //Exception 
    } 

мой .csv выглядит примерно так:

value1;value2;value3;value5;value6;value7 
value8;value9;value10;... 

Может ли эта линия даже работать ?:

if (scanner.next() == null || scanner.next().equals("")) 

И делает кто-нибудь знает, почему, когда я использую только если (scanner.next() == null) ИЛИ if (scanner.next(). equals ("")) j циклами, пока он не имеет значение 5 и впоследствии actiaves Exception abcdefg, но когда я использую if (scanner.next() == null || scanner.next(). equals ("")) j только петли до тех пор, пока он не получит значение 3, а затем вызывает Исключение abcdefg

Что мне не хватает/где лежит моя ошибка и почему она вступает в исключение, даже когда еще есть ячейки, которые не пусты?

ответ

3

Ваше условие в порядке, за исключением того, что вы не хотите дважды звонить scanner.next(), который будет «есть» для ввода.

Вы хотели бы установить значение scanner.next() переменной, а затем проверить значение переменной в условии, если:

String input = scanner.next(); 
if(input == null || input.equals("")){ 
    //Do something 
} 
1

Сохраните значение scanner.next() в переменной, как показано ниже. Используйте переменную в условии. Поскольку вы вызываете next() дважды, ваш указатель перемещается дважды.

String value = Scanner.next() 

Почему бы вам не использовать что-то вроде https://commons.apache.org/proper/commons-csv/user-guide.html читать CSV. Существует множество таких библиотек для чтения файлов CSV.

Смежные вопросы