如何在不使用数组的情况下找出文本文件中重复最多的单词?代码排障
问题分析与修复:无数组统计文件中重复最多的单词
你的代码存在两个核心问题导致无法得到预期结果:
- 字符串比较逻辑错误: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
相关产品推荐
相关产品推荐

