2017-03-17 1 views
0

Ich habe diesen Code, aber wenn ich versuche, es zu laufen habe ich diesen Fehler Exception in thread "main" java.lang.NumberFormatException: For input string: "1" Jede Zeile ist enthält eine Reihe einen Namen eine E-Mail und ein Datum so das erste Zeichen in jeder Zeile die Zahl ist. Die tomb[0] ist nur eine ZahlString in int mit 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."); 
     } 

, wenn das Programm dieser Linie erreichen

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

automatisch zu

springen zurück
try (BufferedReader br = new BufferedReader(new FileReader(this.szemelyekcsv))) 

und Fehler ... bedankt sich bei allen zu helfen.

+1

was ist Grab [0] .. .try es zuerst zu drucken ... –

+0

oh tut mir leid. Jede Zeile enthält eine Nummer, einen Namen, eine E-Mail und ein Datum. Also ist das erste Zeichen in jeder Zeile die Nummer. –

+1

Können Sie eine [mcve] zur Verfügung stellen, das ist seltsam, dass die Ausnahme die Zeichenfolge "1" gibt, da dies parsable sein sollte. Für das Beispiel brauchen Sie wahrscheinlich keine 'Datei', eine' Zeichenfolge' sollte genug sein, versuchen Sie einfach, ob das reproduzierbar ist, bevor Sie es veröffentlichen – AxelH

Antwort

2

Wie pooyan, AxelH und VGR wies darauf hin, dass das Problem tatsächlich ein oder mehrere unsichtbare Zeichen (z. B. Steuerzeichen) war.

Eine Möglichkeit, dies zu lösen, ist alles weggeschnitten, die reguläre Ausdrücke keine Ziffer mit ist:

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

[^...] = nicht jene Zeichen

[0-9] = Ziffern

+ = ein oder mehrere Male

+2

Alternativ kann nur eine trim() auf der Eingabe-String genug sein und in einer Weise ist sicherer, da Sie immer noch schlechte Eingaben erkennen. –