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

如何在不使用数组的情况下找出文本文件中重复最多的单词?代码排障

问题分析与修复:无数组统计文件中重复最多的单词

你的代码存在两个核心问题导致无法得到预期结果:

  • 字符串比较逻辑错误:Java里用==比较字符串时,判断的是两个字符串对象的内存引用是否一致,而非内容是否相同。哪怕两个字符串内容完全一样,只要是不同的对象,==就会返回false。正确的内容比较应该用equals()方法。
  • 子扫描器未重置:内层循环的sub_reader第一次读完整个文件后,就停在文件末尾的位置,后续循环再也读不到任何内容,导致除第一个单词外,其他单词的计数始终为0。需要每次处理新单词时,重新初始化sub_reader。

修复后的代码

import java.io.File;
import java.util.Scanner; 

class Main {
    public static void main(String[] args) throws Exception{
        int max = 0;
        String rep_word = "none";
        File myfile = new File("rough.txt");
        Scanner reader = new Scanner(myfile);
        
        while (reader.hasNext()) { // 改用hasNext()判断是否还有单词,适配按单词读取的逻辑
            String each_word = reader.next();
            int count = 0; // 每次统计新单词时重置计数
            // 每次处理新单词都重新创建子扫描器,确保从文件开头读取
            Scanner sub_reader = new Scanner(myfile);
            while (sub_reader.hasNext()){
                String check = sub_reader.next();
                // 用equals()比较字符串内容
                if (check.equals(each_word)){
                    count += 1;
                }
            }
            sub_reader.close(); // 及时关闭子扫描器
            
            if (max < count){
                max = count;
                rep_word = each_word;
            }
        }
        System.out.println("重复次数最多的单词:" + rep_word + ",次数:" + max);  
        reader.close();
    }
}

额外说明

  • 把hasNextLine()改成hasNext()更合理,因为hasNext()会自动跳过空格、换行符等分隔符,更符合按单词统计的需求。
  • 计数变量count放在外层循环内部,确保每次统计新单词时都从0开始计数,避免之前的计数干扰结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:10:19