2016-03-12 4 views
1

Хотите распечатать матрицу в текстовом файле с разделителями-запятыми, но этот код распечатает матрицу со всеми нулями, которая не является матрицей в текстовом файле.Чтение массива из текстового файла с разделителями-запятыми

public int[][] readFromFile() throws FileNotFoundException { 
    Scanner in = new Scanner(new File("C:\\Users\\Aidan\\Documents\\NetBeansProjects\\matrix\\src\\matrix\\newfile")); 
    int[][] a = new int[9][9]; 
    while (in.hasNext()) { 
     String word = in.next(); 
     if (word.equals(",")) { 
      continue; 
     } 
     System.out.println(word); 
     int x = 0; 
     int y = 0; 
     //System.out.println(Integer.parseInt(word)); 
     int s = Integer.parseInt(word); 
     a[x++][y++] = s; 
    } 
    return a; 
} 
+4

Я бы рекомендовал использовать что-то вроде библиотеки aps commons csv для чего-то подобного. Зачем изобретать колесо? – user1875195

+0

@ user1875195 полностью прав. Я видел слишком много написанного вручную кода, который работает для одного CSV-файла и не работает для следующего. Очень немногие приложения строго соблюдают стандарт csv, поэтому вам нужен синтаксический анализатор, который может обрабатывать вариации. Большинство ручных синтаксических анализаров не могут обрабатывать оба (один, два, три) и («один, семь», два, три), оба из которых действительны csv. – christutty

+0

Чтобы помочь в вашем случае, нам нужно увидеть импортируемый файл csv и вывод (в частности, вывод println (word)) – christutty

ответ

0

Если у вас есть несколько строк в вашем файле CSV:

1,2,3,4,5,6,7,8,9 
2,3,4,5,6,7,8,9,1 
3,4,5,6,7,8,9,1,2 
... 

Вы должны быть в состоянии сделать что-то вроде следующего:

int[][] a = new int[9][9]; 
Scanner in = new Scanner(new File("C:\...")); 
for (int i = 0; i < 9; i++) { 
    String[] line = in.nextLine().split(","); 
    for (int j = 0; j < 9; j++) { 
     a[i][j] = Integer.parseInt(line[j]); 
    } 
} 

Это голый минимум, и включает в себя проверка ошибок, если строка в вашем csv имеет менее 9 номеров, разделенных запятыми, программа выйдет из строя.

Смежные вопросы