2017-03-17 26 views
0

詮釋我有這樣的代碼,但是當我嘗試運行它,我得到這個錯誤 Exception in thread "main" java.lang.NumberFormatException: For input string: "1" 每一道線條都是包含了一些名稱的電子郵件和日期,以便在每一行的第一個字符是數字。該tomb[0]僅僅是一個數字串用的BufferedReader

List<Szemely> lista = new ArrayList<>(); 
try (BufferedReader br = new BufferedReader(new FileReader(this.szemelyekcsv))) { 
      String line; 

      while ((line = br.readLine()) != null) { 
       String[] tomb; 
       tomb = line.split(";"); 

       int sor = Integer.parseInt(tomb [0]); 
       DateTimeFormatter sima = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
       LocalDate szul = LocalDate.parse(tomb[3], sima); 


       lista.add(new Szemely(sor, tomb[1], tomb[2], szul)); 

      } 
     } catch (FileNotFoundException ex) { 
      System.out.println("Nem tudom megnyitni a 'be.txt' fájlt."); 
     } catch (IOException ex) { 
      System.out.println("Hiba a 'be.txt' fájl olvasása közben."); 
     } 

當程序到達此行

int sor = Integer.parseInt(tomb [0]); 

全自動跳回

try (BufferedReader br = new BufferedReader(new FileReader(this.szemelyekcsv))) 

和錯誤... 感謝所有幫助。

+1

什麼是墓[0] .. .try首先打印它... –

+0

哦對不起。每一行都包含一個名字,一個電子郵件和一個日期。所以每一行中的第一個字符就是數字。 –

+1

你能否提供一個[mcve]這很奇怪,因爲這個應該是可解析的,所以這個異常給了String'「1」'。例如,你可能不需要'File',一個'String'應該足夠了,只要在發佈之前重試就可以了。 – AxelH

回答

2

作爲pooyanAxelHVGR和指出了問題確實一個或多個不可見字符(例如,控制字符)。

,解決方法之一就是切斷了一切使用正則表達式,這不是一個數字:

int sor = Integer.parseInt(tomb[0].replaceAll("[^0-9]+", "")); 

[^...] =沒有這些字符

[0-9] =數字

+ =一次或多次

+2

或者只是在輸入字符串上執行trim()可能已經足夠,並且在某種程度上更安全​​,因爲您仍然會檢測到錯誤的輸入。 –