2017-11-08 63 views
5

Dlaczego rzeczywisty łańcuch liczbowy odczytany z tekstu nie może być przeanalizowany za pomocą metody Integer.valueOf() w java?Dlaczego rzeczywisty łańcuch liczbowy odczytany z tekstu nie może zostać przeanalizowany za pomocą metody Integer.valueOf() w java?

Wyjątek:

Exception in thread "main" java.lang.NumberFormatException: For input string: "11127" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.valueOf(Integer.java:766) 
    at sharingBike.ReadTxt.readRecord(ReadTxt.java:91) 
    at sharingBike.ReadTxt.main(ReadTxt.java:17) 

To jest mój kod

 File fileView = new File(filePath); 

     BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileView), "UTF-8")); 

     String line; 

     int count = 0; 
     while ((line = in.readLine()) != null) { 
      String[] lins = line.split(";"); 

      int value; 
      value = Integer.valueOf(lins[0]);} 
+0

'valueOf' zwraca obiekt typu' Integer', nie prymitywny. Zamiast tego użyj 'parseInt'. –

+1

Twój kod powinien działać, jedyną opcją jaką mogę sobie wyobrazić jest to, że masz spacje w tym łańcuchu/wartości całkowitej, które próbujesz przeanalizować ... –

+0

@ ØyvindHauge: 'public static int parseInt (String s)'? – Stefan

Odpowiedz

12

Oto zawartość Twojego ciąg:

System.out.println(Arrays.toString("11127".getBytes())); 

która wyprowadza:

[-17, -69, -65, 49, 49, 49, 50, 55]

pierwsze trzy bajty a UTF-8 BOM.

można naprawić poprzez usunięcie non-cyfry od pierwszego napisu (i używać parseInt do zwracania int zamiast Integer):

int value = Integer.parseInt(lins[0].replaceAll("\\D", ""); 
+1

Kciuki w górę za UTF-BOM –

+0

Naprawdę nie oczekuję, że tak dziwnie ten problem jest w moim oku, ale nadal może mieć właściwą odpowiedź, aby tak szybko go przekonać! StackOverFlow jest potężny, wiem to już teraz. HA HA –

Powiązane problemy