Почему файл читает последнюю строку строки и первую строку второй строки - PullRequest
0 голосов
/ 01 июля 2019

При чтении файла Excel CSV с использованием сканера с разделителем запятых, он читает последний узел в первой строке, а также одновременно читает первый узел следующей строки.

            int counter = 0;
            String[] u = new String[3];
            for (int j = 1; j <= 3; j++) {
                String a = in.next();
                u[counter] = a;
                counter++;
            }
        }

После использования отладчика я заметил, что когда он добрался до последнего элемента, он объединил их, сделав что-то вроде -14256 \ r \ n-14323

-14256 = Последний элемент первого ряда -14323 = Первый элемент следующей строки

Ответы [ 2 ]

1 голос
/ 02 июля 2019

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

java.io.FileReader fr = new java.io.FileReader("path to file");
java.io.BufferedReader br = new java.io.BufferedReader(fr);
String line = br.readLine();
while (line != null) {
    String[] fields = line.split(",");
    // Add code here to handle the "fields".
    line = br.readLine();
}

Обратите внимание, что приведенный выше код является не полным решением, а отправной точкой. Например, я не закрыл BufferedReader.

1 голос
/ 02 июля 2019

Сканер взял только запятую в качестве разделителя.Но вы хотите, чтобы он также принимал конец строки в качестве другого разделителя.

Я предполагаю, что вы создаете экземпляр Сканера следующим образом, используя Scanner::useDelimiter:

Scanner s = new Scanner( inputStream ).useDelimiter( "," );

Если Я правильно понял определение шаблона, оно должно быть:

Scanner s = new Scanner( inputStream ).useDelimiter( ",|\\R" );

\ R обозначает

Соответствие разрыва строки: любая последовательность разрыва строки Unicode, эквивалентно \ u000D \ u000A | [\ u000A \ u000B \ u000C \ u0085 \ u2028 \ u2029]

См. документацию для java.util.regex.Pattern дляподробности. * * 1023

...