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

作为我正在做的项目的一部分,我想清理我生成的重复行条目的文件。但是,这些重复项通常不会彼此靠近发生。我想出了一种用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绑定操作的区别。

以上是 使用Java删除文件中的重复行 的全部内容, 来源链接: utcz.com/qa/402537.html

回到顶部