2016-08-12 6 views
-4

Я получаю ошибку NumberFormatException, когда пытаюсь прочитать некоторые данные из текстового файла и преобразовать их в целое число. Из того, что я видел, говорят другие люди, эта ошибка возникает, когда пустая строка преобразуется в целое число с использованием pasreInt(). Но я смог напечатать строку «1» из файла на выходе. Кто-нибудь знает, почему я получаю эту ошибку, хотя строка не кажется пустой? Вот мой код:Ошибка NumberFormatException при чтении файла

try { 
     //Retrieve Info 
     FileReader fr = new FileReader("BankInfo.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     //Skip specified number of lines 
     for(int i=0; i<line; i++) { 
      br.readLine(); 
     } 

     //Print the string to output 
     String holderStr = br.readLine(); 
     System.out.println(holderStr); 

     //The line creating the NumberFormatException 
     totalBalNum = (double)Integer.parseInt(holderStr); 

     br.close(); 
     //Read Whole File 
     BufferedReader br2 = new BufferedReader(fr); 
     while((str = br.readLine()) != null) { 
      arrList.add(str); 
     } 
     br2.close(); 
    } catch (IOException | NumberFormatException e) { 
     System.out.println("ERROR! Problem with FileReader. " + e); 
    } 

Я знаю, что мой код, вероятно, на самом деле ненадежен и неэффективен слишком ... Я немного нуба.

+0

попробовать 'holderStr.trim() 'перед тем, как пройти, и почему вы снова бросаете Double? В вашей строке могут быть некоторые дополнительные символы, поэтому это может быть причиной для 'NumberFormatException' – Deepak

+0

. Чтобы быть понятным, переменная totalBalNum является целым или двойным? –

+0

Возможный дубликат [Как разрешить java.lang.NumberFormatException: для строки ввода: «N/A»?] (Http://stackoverflow.com/questions/18711896/how-to-resolve-java-lang-numberformatexception- for-input-string-na) – soorapadman

ответ

0

Хорошо, я думаю, что преобразование строки в целое, а затем приведение ее к двойному вызову вызывает ошибку. Почему бы вам просто не преобразовать строку в двойную. Также вы должны обрезать линию, читая ее, чтобы избежать пробелов.

String holderStr = br.readLine().trim(); 
    System.out.println(holderStr); 

    totalBalNum = Double.parseDouble(holderStr); 
+0

Yup! Это была проблема. Также я не знал, что Double.parseDouble существует до сих пор xD, как я сказал, что я немного нуб. Спасибо за помощь. –

+0

Рад, я мог бы помочь. –

0

replaceAll() конвертировать все, кроме цифр, в пустые символы.

holderStr.replaceAll("\\D+",""); 

например.

Строка extra34345 dfdf будет преобразована в 34345
Строки ab34345ba будет преобразована в 34345
строки \n34345\n будет преобразована в 34345

Кодекса

String holderStr = br.readLine(); 

//this line will remove everything from the String, other than Digits 
holderStr= holderStr.replaceAll("\\D+",""); 

System.out.println(holderStr);