2017-01-11 11 views
-1

Ich brauche Matrix aus CSV-Datei mit OpenCSV-Bibliothek zu lesen. Die Funktion readAll() von OpenCSV gibt die Liste String [] zurück, während ich int [] [] brauche. Das ist, was ich habe:Konvertieren Sie die Liste <String[]> zu Array int [] []

cSVFileReader = new CSVReader(new FileReader(path), ','); 
List<String[]> allRows = cSVFileReader.readAll(); 

for(String[] row : allRows){ 
    for (int i = 0; i<cSVFileReader.getLinesRead(); i++){ 
     String[] numbers = row[i].split(" "); 
     int [] ary = new int[numbers.length]; 
     int j = 0; 
     for (String number : numbers){ 
     ary[j++] = Integer.parseInt(number); 
     } 
    } 
} 

Und das ist Ausgabe:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:504) 
at java.lang.Integer.parseInt(Integer.java:527) 
at strassenalgorithm.CSVFile.readM(CSVFile.java:37) 
at strassenalgorithm.Main.main(Main.java:26) 
+0

Haben Sie versucht, Ihren Code zu debuggen? – luk2302

+0

Scheint so, als parsen Sie eine leere Zeichenfolge in eine Ganzzahl. Sollte nicht schwer zu debuggen sein. –

+0

Sie versuchen, einen leeren Raum zu einer Zahl zu analysieren. Überprüfen Sie zuerst, ob die Zeichenfolge leer oder leer ist. – Gatusko

Antwort

2

Wenn Sie eine NumberFormatException sehen, müssen Sie entscheiden, ob Sie Ihre Eingabe falsch ist, oder der Code ist falsch.

Wenn Ihre Eingabe falsch ist, müssen Sie Code hinzufügen, der auf der obersten Ebene, z.

try { 
    parseMyFile(); 
} catch (NumberFormatException nfe) { 
    System.err.println("File contains invalid numbers: "+nfe.getMessage()); 
} 

Wenn Sie diese Eingabe zulassen möchten, z. denn es ist OK leere Strings anstelle von Zahlen zu haben, für bestimmte Eingabe überprüfen oder NumberFormatException innerhalb der Schleife fangen:

for (String number : numbers){ 
    if (number.length() != 0) { 
     ary[j++] = Integer.parseInt(number); 
    } else { 
     ary[j++] = 0; // In this case, zero is the same as "empty" 
    } 
} 
+0

Die Datei, mit der ich gearbeitet habe, wurde nicht überprüft. Es enthielt Leerzeichen. Vielen Dank –

0

Nach noch nicht funktioniert hat mein Code Problem mit falscher Eingabe zu lösen, dieses Mal gab mir ArrayIndexOutOfBoundsException . Vielleicht hat smn das gleiche Problem, also hier ist meine Lösung.

private static int r; 

public static int[][] readM(String path) throws FileNotFoundException, IOException { 
    cSVFileReader = new CSVReader(new FileReader(path), ','); 
    List<String[]> allRows = cSVFileReader.readAll(); 
    String[][] array = new String[allRows.size()][]; 
    for (int i = 0; i < allRows.size(); i++) { 
     String[] row = allRows.get(i); 
     array[i] = row; 
     h = row.length; 
     r++; 
      } 
    int[][] mResult = new int[r][h]; 
    for (int i =0; i<r; i++) { 
     for (int j = 0; j< h; j++) { 
      mResult[i][j] = Integer.parseInt(array[i][j]); 
     } 
    } 
    return mResult; } 

bedeutet, ich hatte falsche Ansatz. Alles, was ich brauchte, war die Liste der Strings in 2d Array von Strings zu konvertieren, und neben 2d Array von Int

Verwandte Themen