Почему здесь функция NextInt () возвращает false? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть файл MatrixToCsv.csv следующим образом:


67,85,20,87,78,46,66;
33,66,88,24,90,28,19;
76,22,46,33,10,16,73;
16,79,28,98,67,49,62;
85,75,12,18,92,58,80;
59,89,16,10,52,67,35;
54,66,62,53,39,91,37;

И я хочу сохранить его в массив, но только целые числа, поэтому я написал это:


public static void main(String[] args) throws IOException {

    Scanner input = new Scanner (new File("MatrixToCsv.csv"));
    int rows = 7;
    int columns = 7;
    int[][] array = new int[rows][columns];

    input.useDelimiter(Pattern.compile(",|;|(\\n)"));
    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < columns; ++j)
        {
            if(input.hasNextInt())
            {
                array[i][j] = input.nextInt();
            }  
        }
    }

    for(int i = 0; i < rows; i++) {
        for (int j = 0; j < array.length; j++) {
            System.out.print(array[i][j]+ " ");
        }
        System.out.println();
    }
    input.close();
}

И вывод:


 67 85 20 87 78 46 66 
    0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 

И мне интересно, почему он читает только одну строку из текста.Благодарю.Q.

1 Ответ

0 голосов
/ 30 ноября 2018
input.useDelimiter(Pattern.compile(",|;|(\\n)"));

Здесь вы в основном говорите, что разделителем может быть одиночная запятая ИЛИ a одиночная точка с запятой ИЛИ a одиночный символ новой строки.

В конце каждой строки у вас есть точка с запятой и новая строка, а это не то, что вы настроили для сканера в качестве разделителя.Вместо этого используйте [,;\\n]+, что означает «один из ,, ; и \n, повторенный как минимум один раз».Таким образом, вы тоже подойдете ;\n.

input.useDelimiter(Pattern.compile("[,;\\n]+"));

Посмотрите это в действии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...