比较2个数组并删除重复数据?Java的

ann*_*nno 1 java arrays compare

所以我试图在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);
Run Code Online (Sandbox Code Playgroud)

fge*_*fge 6

将第一个文件中的所有行读入Set<String>(不是a List),类似于第二个文件.例如,使用LinkedHashSets(保留插入顺序).

然后做:

// set2 contains lines in second file, set1 in first file
set2.removeAll(set1);
Run Code Online (Sandbox Code Playgroud)

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

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

如果您使用的番石榴,您还可以使用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);
Run Code Online (Sandbox Code Playgroud)