1

所以我试图比较 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);
4

3 回答 3

6

将第一个文件中的所有行读入 a Set<String>(不是 a List),同样从第二个文件中读取。例如使用LinkedHashSets (保留插入顺序)。

然后做:

// set2 contains lines in second file, set1 in first file
set2.removeAll(set1);

然后将 的内容写入set2结果文件。

请注意,这假设没有重复值。

如果你使用 Guava,你也可以Sets.difference()用来计算集合之间的差异,并Files.readLines()直接从文件中读取行(注意,这不是 Java 7 的Files-- 如果你使用 Java 7,你可以使用Files.readAllLines()-- 并File抛出窗口的好衡量)


使用 Java 7 的完整代码:

final Path path1 = Paths.get("/path/to/file1");
final Path path2 = Paths.get("/path/to/file2");
final Path outfile = Paths.get("/path/to/outfile");

final List<String> list1 = Files.readAllLines(path1, StandardCharsets.UTF_8);
final List<String> list2 = Files.readAllLines(path2, StandardCharsets.UTF_8);

list2.removeAll(list1);

Files.write(outfile, list2, StandardCharsets.UTF_8);
于 2013-07-19T07:42:26.730 回答
0

如果您的意思是合并 list1+list2 然后删除重复项使用普通的 Set 集合,因为它不包含重复项,当您添加值时,它将自动删除 dpulicates,

于 2013-07-19T07:42:37.900 回答
0

1.将 2 个文件读入 2 个 ArrayList 2.创建 2 个 for 循环,其中一个在另一个循环内。第一个循环应该在第一个列表中迭代,第二个循环应该在第二个列表中迭代。3.比较列表 1 和列表 2 的每个值。如果任何相等的值将其删除。

于 2013-07-19T07:43:21.627 回答