2017-03-17 24 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()可能已经足够,并且在某种程度上更安全​​,因为您仍然会检测到错误的输入。 –