0

我想知道循环两个 csv 文件并比较它们的列的最合适的方法是什么。具体来说,我想将 csv file1 第 1 列与 csv file2 第 20 列的每次迭代进行比较,并检查是否有匹配项。这是我到目前为止所拥有的。此外 csv file1 比 csv file2 小得多。

public class ClassifyData {

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

File file1 = new File("file1.csv");

File file2 = new File("file2.csv");
FileWriter writer = new FileWriter("/Users/home/Work.csv");
PrintWriter pw = new PrintWriter(writer);
Scanner in = new Scanner(file1);
Scanner in2 = new Scanner(file2);
boolean firstLine = true;
String[] temp = null;
String [] temp2 = null;
String line = null;
String line2 = null;

while((line = in.nextLine())!=null){

    temp= line.split(",");  
while(line2 = in2.nextLine() !=null){
    temp2 = line2.split(",");


    if(temp[0] == temp[20]){
        System.out.println("match");
        pw.append("0");
        continue;

    }




    pw.append("\n");

    }
}

pw.flush();
pw.close();
writer.close();

}

    }
4

2 回答 2

1

if(temp[0] == temp[20])您可能的意思的行if(temp[0].equals(temp2[20]))中。这将为您提供所需的比较。但是,您的内部while循环仍然不会像您想要的那样在第二个文件的开头重新开始。我不认为Scanner对象可以在文件上重新开始,即使它们可以,你也会因为一遍又一遍地读取同一个文件而浪费大量的文件读取。像这样的东西对你的磁盘来说会更有效:

ArrayList<String> list1 = new ArrayList<String>;
while((line = in.nextLine())!=null){
    temp= line.split(",");  
    list1.add(temp[0]);
}
// ...
for(int i = 0; i < list1.size(); i++){
    for(int j = 0; j < list2.size(); j++){
        if(list1.get(i).equals(list2.get(j))){
            System.out.println("Match found");
        }
    }
}

警告: 未经测试的代码

于 2012-05-27T22:19:20.503 回答
0

我认为您的解决方案不会起作用,因为您只浏览了两个文件一次(您同时按顺序递增了两个文件)。鉴于第一个文件很小,我建议完全浏览该文件一次,并将第一列中的值存储在哈希表中。然后循环浏览第二个文件,检查第 20 列的值是否出现在哈希表中。

于 2012-05-27T22:13:32.083 回答