用于比较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);
}
}
在file1中,我有一列包含3000行。
在file2中,我有一列包含1000行。
countLinesInW
仅与行相反并且可以正常工作。
j
计数器存在问题。它应该检查相同行的数量,但是不正确。 j
返回“ 1”,但我知道它太低了(预期结果〜700)。
答案 0 :(得分:0)
在代码中
while (w.hasNextLine()) {
String lineW = w.nextLine();
countLinesInW++;
while(s.hasNextLine()) {
String lineS = s.nextLine();
if(lineS.equals(lineW)){
j++;
}
}
}
s.hasNextLine()在扫描器w一次读取完整个文件之后始终为false。
您的目的是从两个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方法将保留两个列表中的公用项。
答案 1 :(得分:0)
不需要直接循环,并且可以根据需要指定字符集:
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);