2017-01-11 30 views
-1

我需要使用OpenCSV庫從csv文件讀取矩陣。函數readAll()從OpenCSV返回List String [],而我需要int [] []。這是我有:將列表<String[]>轉換爲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); 
     } 
    } 
} 

這是輸出:

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

您是否嘗試過調試您的代碼? – luk2302

+0

好像你在將一個空字符串解析爲一個整數。不應該很難調試。 –

+0

你正試圖解析一個blanck空間到一個數字。首先檢查字符串是否爲空或空 – Gatusko

回答

2

當你看到一個NumberFormatException,你需要決定,如果你的輸入錯誤,或者你的代碼是錯誤的。

如果輸入錯誤,則需要添加代碼,以便在頂層生成漂亮的錯誤,例如,

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

如果您想允許此輸入,例如因爲它的確定有空字符串來代替數字,檢查是否有特定的輸入,或趕上NumberFormatException內循環:

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

沒有檢查我正在使用的文件。它包括空格。謝謝 –

0

與輸錯我的代碼仍然沒有工作問題解決之後,這個時候給我ArrayIndexOutOfBoundsException異常。也許smn會有同樣的問題,所以這裏是我的解決方案。

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; } 

意味着我有錯誤的做法。我所需要的只是將字符串列表轉換爲字符串的二維數組,並緊接着二維數組int

相關問題