有没有办法使用 Java 检查文件中的重复行?
Is there a way to check for duplicate lines within a file using Java?
我正在尝试读取 .inp 文件中的每一行,并且对于每个非重复行,将该行写入一个新文件。到目前为止,我对代码的 运行 的问题是所有行都写入输出文件,无论它们是否与前一行重复。我正在使用 Scanner 对象读取文件,并使用 BufferedReader/FileWriter 对象写入输出文件。
如何避免重复?
String book = reader.nextLine();
boolean duplicate = false;
while (reader.hasNext() == true) {
try {
duplicate = reader.hasNext(book);
if (duplicate == true) {
book = reader.nextLine();
} else {
writer.write(book + "\n");
book = reader.nextLine();
}
} catch (NoSuchElementException ex) {
break;
}
}
视情况而定:
- 如果重复的行是连续的,维护一个变量来存储前一行并与它进行比较。
- 如果重复的行不是连续的,并且有相对(*)很少的几行,将你已经处理过的行存储在
HashSet
和在处理一行时检查设置是否已经 contains()
行。
- 如果重复的行不是连续的,并且相对(*)行很少但很长,而不是将完整的行存储在
HashSet
中,存储每行的哈希值(例如 SHA1),并与之进行比较。
- 如果重复行不是连续的,并且有很多长行,请将上述技术与某种形式的持久性数据库或数据存储相结合。
(*) 相对于可用内存
我正在尝试读取 .inp 文件中的每一行,并且对于每个非重复行,将该行写入一个新文件。到目前为止,我对代码的 运行 的问题是所有行都写入输出文件,无论它们是否与前一行重复。我正在使用 Scanner 对象读取文件,并使用 BufferedReader/FileWriter 对象写入输出文件。
如何避免重复?
String book = reader.nextLine();
boolean duplicate = false;
while (reader.hasNext() == true) {
try {
duplicate = reader.hasNext(book);
if (duplicate == true) {
book = reader.nextLine();
} else {
writer.write(book + "\n");
book = reader.nextLine();
}
} catch (NoSuchElementException ex) {
break;
}
}
视情况而定:
- 如果重复的行是连续的,维护一个变量来存储前一行并与它进行比较。
- 如果重复的行不是连续的,并且有相对(*)很少的几行,将你已经处理过的行存储在
HashSet
和在处理一行时检查设置是否已经contains()
行。 - 如果重复的行不是连续的,并且相对(*)行很少但很长,而不是将完整的行存储在
HashSet
中,存储每行的哈希值(例如 SHA1),并与之进行比较。 - 如果重复行不是连续的,并且有很多长行,请将上述技术与某种形式的持久性数据库或数据存储相结合。
(*) 相对于可用内存