【问题标题】:Is there a way to check for duplicate lines within a file using Java?有没有办法使用 Java 检查文件中的重复行?
【发布时间】:2026-02-16 12:50:02
【问题描述】:

我正在尝试读取 .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;
    }
}

【问题讨论】:

  • 您可以将每个字符串的哈希 (System.identityHashCode(string)) 存储在 Set 中(但不要忘记内存限制,此解决方案适用于 1000 个字符串,但不确定是否可以1 000 000 个字符串都可以)。
  • 你是说重复的行一起出现在文件中?例如,第 96 行不能与第 70 行重复吗?另外,您可以edit您的问题并从文件中发布一些示例行吗?顺便问一下,这个文件有多少行?

标签: java file duplicates iostream writer


【解决方案1】:

视情况而定:

  • 如果重复行是连续的,请维护一个变量来存储前一行并与之进行比较。
  • 如果重复行不连续,并且有相对 (*) 几行短行,请将您已经处理的行存储在 HashSet 中,并在处理行时检查是否是否已设置contains() 行。
  • 如果重复的行不是连续的,并且有相对 (*) 很少但很长的行,则不要将完整的行存储在 HashSet 中,而是存储一个哈希值(例如 SHA1)每一行,并与之进行比较。
  • 如果重复的行不连续,并且行很长,请将上述技术与某种形式的持久性数据库或数据存储结合起来。

(*) 相对于可用内存

【讨论】:

    最近更新 更多