You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中修改单词频率统计代码:实现按行去重统计

调整Java代码实现按行去重统计单词出现行数

当然可以!你的需求是把原本统计整个文档中单词总出现次数的逻辑,改成每行内同一单词仅统计一次(也就是最终统计每个单词在多少不同的行中出现过,而非总出现次数)对吧?我帮你调整了代码,同时修复了原代码里的一些小问题(比如原代码用sc.next()后又按空格拆分是多余的,sc.next()本身就会按空格分隔取单词)。

修改后的代码

import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class WordLineCounter {
    public static void main(String[] args) {
        // 用于记录每个单词出现的行数
        Map<String, Integer> wordLineCount = new HashMap<>();
        File file = new File("filename.txt");

        try (Scanner scanner = new Scanner(file)) {
            // 逐行读取文档
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine().trim();
                if (line.isEmpty()) {
                    continue; // 跳过空行
                }
                // 按空格拆分该行的单词(处理多个连续空格的情况)
                String[] wordsInLine = line.split("\\s+");
                // 用Set对当前行的单词去重,确保同一行内同一单词只算一次
                Set<String> uniqueWordsInLine = new HashSet<>();
                for (String word : wordsInLine) {
                    // 可选:统一转为小写,避免大小写差异(比如Hello和hello算同一个单词)
                    String normalizedWord = word.toLowerCase();
                    uniqueWordsInLine.add(normalizedWord);
                }
                // 更新全局的单词行数统计
                for (String word : uniqueWordsInLine) {
                    wordLineCount.put(word, wordLineCount.getOrDefault(word, 0) + 1);
                }
            }

            // 输出统计结果
            System.out.println("单词及其出现的行数:");
            for (Map.Entry<String, Integer> entry : wordLineCount.entrySet()) {
                System.out.println(entry.getKey() + ": " + entry.getValue() + " 行");
            }
        } catch (Exception e) {
            System.out.println("文件未找到或读取错误:" + e.getMessage());
        }
    }
}

关键修改点说明

  • 逐行读取:改用scanner.hasNextLine()和scanner.nextLine(),这样能完整处理每一行的内容,方便对行内单词去重
  • 行内去重:用HashSet存储当前行的单词,自动过滤掉同一行内重复的单词
  • 统计行数:用HashMap记录每个单词出现在多少行中,每处理一行去重后的单词,就对应单词的计数+1
  • 优化细节:
    • 处理了空行的情况,避免无效统计
    • 加入了单词小写归一化(可选),消除大小写带来的统计差异
    • 用try-with-resources自动关闭Scanner,避免资源泄漏
    • 优化了错误提示,显示具体的异常信息

内容的提问来源于stack exchange,提问作者CodingIsHardMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:59:40