2016-10-21 2 views
1

Я пытаюсь прочитать из файла CSV с помощью сканера, но я получаю исключение InputMismatchException, когда я пытаюсь прочитать последний двойной и есть более одной строки в моем CSV-файле. Я думаю, это потому, что он читает \ n как часть двойника. Как заставить его игнорировать разрыв строки?InputMismatchException со сканером при чтении double из строки с n-Java

CSV файл

P1,25,30 
P2,10,10 

Java

public static ArrayList<MarkEntry> readCSV(File file) { 
    ArrayList<MarkEntry> entries = new ArrayList<>(); 
    try 
    { 
     Scanner in = new Scanner(file).useDelimiter(","); 
     while (in.hasNext()) 
     { 
      String title = in.next(); 
      double mark = in.nextDouble(); 
      double outOf = in.nextDouble(); //Program Crashes here 
      entries.add(new MarkEntry(title, mark, outOf)); 
     } 
    } catch (FileNotFoundException e) 
    { 
     System.out.println("File: " + file + " not found"); 
    } 

    return entries; 
} 

ответ

1

Вы можете использовать несколько разделители:

Scanner in = new Scanner(input).useDelimiter(",|\\r\\n"); 

Примечание: В Linux, линия концовка просто \n, так что вы будете использовать этот код:

Scanner in = new Scanner(input).useDelimiter(",|\\n"); 
0

ошибка вызвана тем, что сканер пытается прочитать до следующего разделителя (,) или до конца строки. Последний токен будет включать в себя новую строку, и преобразование этого значения в double приведет к ошибке, которую вы видите.

Trim новой строки от перед разбором со сканером:

String input = "foo,bar,2.5\n"; 
Scanner in = new Scanner(input.trim()).useDelimiter(","); 
System.out.println(in.next()); 
System.out.println(in.next()); 
System.out.println(in.nextDouble()); 
Смежные вопросы