Код для сравнения 2 CSV файлов не видит сходства - PullRequest
0 голосов
/ 30 марта 2019

Код для сравнения 2 CSV файлов:

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class compareCSV {
    public static void main(String[] args) throws IOException {
        int j = 0;
        int countLinesInW = 0;
        Scanner s = new Scanner(new File("src/hurtownie/file1.csv"));
        Scanner w = new Scanner(new File("src/hurtownie/file2.csv"));
        while (w.hasNextLine()) {
            String lineW = w.nextLine();
            countLinesInW++;
        while(s.hasNextLine()) {
            String lineS = s.nextLine();
            if(lineS.equals(lineW)){
                j++;
            }
        }
        }
        System.out.println(countLinesInW);
        System.out.println(j);
    }
}

В файле1 у меня есть один столбец с 3000 строк. В file2 у меня есть один столбец с 1000 строк. countLinesInW только против строк и работает правильно. Проблема существует для j counter. Он должен проверять количество одинаковых строк, но это не правильно. j вернуть «1», но я знаю, что он настолько низок (ожидаемый результат ~ 700).

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Прямой цикл не требуется и возможно указать набор символов, если необходимо:

List<String> linesInFile1 = Files.readAllLines(new File("file1.csv").toPath(), Charset.defaultCharset() );
List<String> linesInFile2 = Files.readAllLines(new File("file2.csv").toPath(), Charset.defaultCharset() );

linesInFile1.retainAll(linesInFile2);
0 голосов
/ 30 марта 2019

в коде

while (w.hasNextLine()) {
    String lineW = w.nextLine();
    countLinesInW++;
    while(s.hasNextLine()) {
        String lineS = s.nextLine();
        if(lineS.equals(lineW)){
            j++;
        }
    }
}

s.hasNextLine () всегда ложно после того, как сканер w завершил чтение всего файла один раз.

Ваша цель - получить количество одинаковых строк из обоих CSV-файлов, я бы посоветовал прочитать все строки и сохранить их сначала в двух списках, а затем сравнить два списки, чтобы получить количество похожих строк. Что-то вроде

List<String> linesInFile1 = new ArrayList<>();
List<String> linesInFile2 = new ArrayList<>();
while (w.hasNextLine()) {
    String lineW = w.nextLine();
    linesInFile1.add(lineW);
}
while(s.hasNextLine()) {
    String lineS = s.nextLine();
    linesInFile2.add(lineS);
}

linesInFile1.retainAll(linesInFile2);
j = linesInFile1.size();

Обратите внимание, что метод retainAll сохраняет общие элементы в обоих списках.

...