2017-01-11 2 views
-1

Мне нужно прочитать матрицу из csv-файла, используя библиотеку OpenCSV. Функция readAll() из OpenCSV возвращает List String [], в то время как мне нужно int [] []. Это то, что у меня есть:Convert List <String[]> to 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; } 

означает, что у меня был неправильный подход. Все, что мне нужно было преобразовать List of Strings в 2d массив строк, а рядом с 2d массивом int