当前位置: 首页 > 面试题库 >

使用Java删除文件中的重复行

胡鸿羲
2023-03-14
问题内容

作为我正在做的项目的一部分,我想清理我生成的重复行条目的文件。但是,这些重复项通常不会彼此靠近发生。我想出了一种用Java执行此操作的方法(基本上是复制文件,然后使用嵌套的while语句将一个文件中的每一行与其他文件中的每一行进行比较)。问题是我生成的文件很大而且文本很重(大约22.5万行文本,大约40兆)。我估计目前的程序需要63个小时!这绝对是不可接受的。

但是,我需要一个集成的解决方案。最好用Java。有任何想法吗?谢谢!


问题答案:

嗯… 40兆似乎足够小,您可以建立一个Set线条,然后全部打印出来。这将比O(n 2)I / O工作更快。

就像这样(忽略异常):

public void stripDuplicatesFromFile(String filename) {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    Set<String> lines = new HashSet<String>(10000); // maybe should be bigger
    String line;
    while ((line = reader.readLine()) != null) {
        lines.add(line);
    }
    reader.close();
    BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
    for (String unique : lines) {
        writer.write(unique);
        writer.newLine();
    }
    writer.close();
}

如果顺序很重要,则可以使用LinkedHashSet而不是HashSet。由于元素是通过引用存储的,因此与实际数据量相比,额外链表的开销应该微不足道。

编辑: 正如Workshop
Alex指出的那样,如果您不介意制作临时文件,则只需在阅读时打印出来即可。这使您可以使用HashSet而不是LinkedHashSet。但是我怀疑您会注意到这样的I
/ O绑定操作的区别。



 类似资料:
  • 问题内容: 有没有一种方法可以使用ant删除重复文件?具体来说,如果我在两个不同的输出目录中具有相同的文件名,则要从第二个目录中删除它。 问题答案: 我想我想出了一个解决方案。

  • 问题内容: 目标 我已经从hotmail下载了CSV文件,但其中有很多重复项。这些重复项是完整的副本,我不知道为什么我的手机会创建它们。 我想摆脱重复。 方法 编写python脚本以删除重复项。 技术指标 问题答案: 更新:2016 如果您乐于使用有用的外部库: @IcyFlame解决方案的更有效版本 要就地编辑同一文件,您可以使用此

  • 问题内容: 我想通过Java从磁盘恢复文件而不使用本机库 我正在使用Java 8进行此操作 据我所知,已删除的文件会保留在磁盘上,直到被覆盖为止 我可以直接访问Linux上的磁盘,并且可以读取原始数据,但是,例如,如何解析ext4或NTFS文件系统上的已删除文件? 谢谢。 问题答案: 要恢复已删除的文件,需要了解底层文件系统的实现方式,因此您需要做一些阅读工作,然后才能到达任何地方。 从理论上讲,

  • 我已经为我的selenium项目实现了Testng和Cucumber。我通过运行Testng来运行我的测试用例。xml,我已将它们重定向到Testng Runner文件。每个运行程序文件中唯一的区别是@tag,它链接到Cucumber功能场景,因此我使用@sanity@regression等创建了单独的运行程序文件。我希望避免创建太多运行程序文件,因为只有@tag是一个变量。我想参数化注释,这样我

  • 问题内容: 谢谢Marko。我重写代码。尝试使其简单。这次它可以真正编译。但它只能删除彼此相邻的重复项。例如,如果我输入1 2 3 3 4 4 5 1,则输出为1 2 3 4 5 1。最后它无法拾取重复项。(顺便说一句:本网站的新内容,如果使任何显示混乱我的歉意) 这是新的代码: 问题答案: 要回答“删除java arraylist中的重复项”问题: 只需将所有元素放到中,就可以完成。 -要么-