2017-01-11 5 views
-1

OpenCSVライブラリを使用してcsv-fileから行列を読み込む必要があります。 OpenCSVからの関数readAll()は、リスト文字列[]を返しますが、int [] []が必要です。これは私が持っているものです。リストを<String[]>に変換する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); 
     } 
    } 
} 

そして、これが出力されます:あなたがNumberFormatExceptionを見るとき、あなたはあなたの入力が間違っている、またはあなたのコードが間違っているかどうかを判断するために

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

必要です。

入力が間違っている場合は、トップレベルで見栄えのよいエラーを生成するコードを追加する必要があります。

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

この入力を許可する場合は、それは、数字の代わりに空の文字列を持っている特定の入力を確認したり、ループ内NumberFormatExceptionをキャッチするためにOKですので、:、この時間がくれた

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

私が間違ったアプローチをしていたことを意味します。私が必要とするのは、文字列のリストを文字列の2次元配列に変換することと、次に2次元配列の整数に変換することでした

関連する問題