2016-11-02 4 views
2

У меня проблема с кодом, который кажется, что он должен работать отлично.Scanner.nextInt() throwing InputMismatchException при чтении целого числа

public void inputFile() { 
    Scanner reader = null; 
    try { 
     reader = new Scanner(new File ("parts.dat")); 
     reader.useDelimiter("\\,|\\n"); 
     while(reader.hasNext()) { 
      System.out.println(reader.next()); 
      System.out.println(reader.next()); 
      System.out.println(reader.nextDouble()); 
      System.out.println(reader.nextInt()); //InputMismatchException 
     } 
    } 
    catch(IOException e) { 
    } 
    finally { 
     reader.close(); 
    } 
} 

Когда я запускаю код, я получаю следующий результат:

137B245 
1/4" bolt 
0.59 
Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at lab02d.inputFile(lab02d.java:25) 
    at lab02d.main(lab02d.java:11) 

parts.dat содержит:

137B245,1/4" bolt,.59,12 
137N245,1/4" nut,.29,12 
137B246,1/2" bolt,.79,12 
137N246,1/2" nut,.39,25 
139S128,1/8" wood screw,.19,8 
139S129,1/4" wood screw,.22,4 
139S130,1/2" wood screw,.35,16 
145W321,1/8" washer,.12,5 
145W322,1/4" washer,.14,6 
145W323,1/2" washer,.18,9 

Я попробовал несколько вещей, чтобы попытаться получить этот код Работа. Я попытался использовать Integer.parseInt (reader.next()), но это просто выбрасывает другое исключение. Я также попытался изменить кодировку текстового файла, но это ничего не исправить.

+0

Можно ли положить 'e.printStackTrace()' в блок 'catch' и опубликовать его? –

ответ

1

Я совершенно уверен, что ваш файл имеет дополнительное пространство в конце этих строк, что предотвращает разбор сканера, что выглядит разумным int. Как возврат каретки. Отрегулируйте ваш разделитель на что-то вроде ниже и повторите попытку:

reader.useDelimiter("[\\,\\n\\r]+"); 
Смежные вопросы