我想知道循环两个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();
}
}
答案 0 :(得分: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");
}
}
}
警告: 未经测试的代码
答案 1 :(得分:0)
我认为您的解决方案无法正常运行,因为您只需浏览两个文件(您可以同时按顺序递增两个文件)。鉴于第一个文件很小,我建议完全浏览一下该文件,并将值存储在哈希表的第一列中。然后遍历第二个文件,检查第20列中的值是否出现在哈希表中。