如何用Java去除文本文件中的重复单词?现有代码求助
解决Java文本文件去重并生成输出文件的问题
嘿,我来帮你搞定这个需求!你的目标是读取names.txt里的单词,去除重复后写入output.txt,原代码里有几个小问题需要调整,我一步步给你讲清楚:
原代码的问题点
- 文件名写错啦:你要读的是
names.txt,但代码里写的是weather.txt - 用到了未定义的
set变量,而且逻辑是在找相邻重复,不是全局去重 - 没有实现将结果写入输出文件的逻辑
- 统计单词数的逻辑也有问题,会少算第一个单词
修正后的完整代码
我们可以用LinkedHashSet来处理去重,它既能自动去重,还能保留单词第一次出现的顺序,完美适配你的需求。然后用文件写入流把结果输出到output.txt:
import java.io.*; import java.util.LinkedHashSet; import java.util.Scanner; import java.util.Set; public class DuplicateRemover { public static void main(String[] args) throws IOException { // 用LinkedHashSet保存去重后的单词,保留插入顺序 Set<String> uniqueNames = new LinkedHashSet<>(); // 读取目标文件names.txt File inputFile = new File("names.txt"); Scanner scanner = new Scanner(inputFile); // 遍历文件里的所有单词,加入Set自动去重 while (scanner.hasNext()) { String name = scanner.next(); uniqueNames.add(name); } scanner.close(); // 记得关闭扫描器 // 将去重后的内容写入output.txt File outputFile = new File("output.txt"); BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); // 把Set里的元素用空格拼接写入 StringBuilder sb = new StringBuilder(); for (String name : uniqueNames) { if (sb.length() > 0) { sb.append(" "); } sb.append(name); } writer.write(sb.toString()); writer.close(); // 关闭写入流 // 控制台打印结果,方便验证 System.out.println("去重后的内容:"); System.out.println(sb.toString()); System.out.println("总共有 " + uniqueNames.size() + " 个不重复的单词"); } }
代码解释
- LinkedHashSet的作用:和普通HashSet不同,它会记住元素插入的顺序,这样输出的结果就和原文件中单词第一次出现的顺序一致,符合你的需求。
- 文件读取:用
Scanner按空格分割读取每个单词,逐个加入Set,重复的单词会被自动忽略。 - 文件写入:用
BufferedWriter来高效写入文件,先把所有单词用StringBuilder拼接成带空格的字符串,再一次性写入,避免频繁IO操作。 - 资源关闭:记得关闭
Scanner和BufferedWriter,避免资源泄漏。
运行结果
执行后,output.txt里的内容会是:
Maria Derek Erica Livia Jack Anita Kendall Jamie Thomson
完全符合你的预期!
内容的提问来源于stack exchange,提问作者XRA
相关产品推荐
相关产品推荐

