所以我试图在java中比较2个巨大的文本列表。文本可能如下所示:
list1:值1,值2,值3 ... list2:值1604,值7000,值1 ...
关键是我喜欢从列表1到列表2中的每一行进行比较(每个值都在自己的行中)并从列表2中删除重复项将ARRAY 3写入文件。这就是我得到的:
编辑:
File haveFile = new File("Combine Without Dups.txt");
BufferedReader br = null;
br = new BufferedReader(new FileReader(haveFile));
String line ;
String list = null ;
while ((line = br.readLine()) != null) {
list = line ;
}
File compareFile = new File("database.txt");
BufferedReader br2 = null;
br2 = new BufferedReader(new FileReader(compareFile));
String line2 ;
String list2 = null ;
while ((line2 = br2.readLine()) != null) {
list2 = line2 ;
list2.removeAll(list);
答案 0 :(得分:6)
将第一个文件中的所有行读入Set<String>
(不是List
),类似于第二个文件。例如,使用LinkedHashSet
s(保留插入顺序)。
然后做:
// set2 contains lines in second file, set1 in first file
set2.removeAll(set1);
然后将set2
的内容写入结果文件。
请注意,这假设没有重复的值。
如果您使用Guava,您还可以使用Sets.difference()
计算集合之间的差异,并使用Files.readLines()
直接从文件中读取行(注意,这不是Java 7的{{1} } - 如果您使用Java 7,则可以使用Files.readAllLines()
- 并将Files
抛出窗口以获得良好的衡量标准)
使用Java 7的完整代码:
File
答案 1 :(得分:0)
如果你的意思是组合list1 + list2然后删除重复项 使用普通的Set集合,因为它不包含重复项,当你添加值时它会自动删除dpulicates,
答案 2 :(得分:0)
1.将2个文件读入2个ArrayList 2.为循环创建2,其中一个在另一个循环内。第一个循环应该在第一个列表上迭代,第二个循环应该在第二个列表中迭代。 3.比较列表1和列表2的每个值。如果任何相等的值将其删除。