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

最初のファイルからすべての行をSet<String>( ではなくList) に読み込み、2 番目のファイルからも同様に読み込みます。たとえば、LinkedHashSets を使用する (挿入順序を保持するため)。

次に、次のようにします。

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

set2次に、の内容を結果ファイルに書き込みます。

これは、重複する値がないことを前提としていることに注意してください。

Guava を使用する場合Sets.difference()は、セット間の差を計算したりFiles.readLines()、ファイルから直接行を読み取ったりするために使用することもできます (これは Java 7 のものではないことに注意してください。Java 7Filesを使用する場合は、使用できます。適切な測定のためにウィンドウの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 コレクションを使用します。重複が含まれていないため、値を追加すると重複が自動的に削除されます。

于 2013-07-19T07:42:37.900 に答える
0

1. 2 つのファイルを 2 つの ArrayList に読み込みます。3. リスト 1 とリスト 2 の各値を比較します。値が等しい場合は、それを削除します。

于 2013-07-19T07:43:21.627 に答える