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

Java文件字符计数程序问题求助:无法正确统计字符出现次数

Java 文件字符计数程序错误修正

原代码核心问题

  • 误用文件读取流inputFile.nextLine()获取用户输入的字符,应该用键盘输入的keyboard实例,且该输入只需在文件遍历前执行一次,无需循环重复输入。
  • 每次循环重置counter变量,无法累加整个文件的字符出现次数。
  • line.contains(character)仅能判断行内是否存在目标字符,无法统计该行内的出现次数,且判断存在时仅计数1次,统计逻辑完全错误。
  • do-while循环逻辑错误,导致遍历文件每一行都输出一次结果,同时因错误读取文件内容作为用户输入,引发文件指针越界,抛出java.util.NoSuchElementException。

修正后的代码

package filelettercounter;

import java.util.Scanner;
import java.io.*;

public class FileLetterCounter {

    public static void main(String[] args) throws IOException {

        Scanner keyboard = new Scanner(System.in);
        
        // 获取目标文件名
        System.out.print("Enter the file name: ");
        String filename = keyboard.nextLine();
        
        // 获取要统计的单个字符
        System.out.print("Enter a character: ");
        char targetChar = keyboard.nextLine().charAt(0);
        
        File file = new File(filename);
        Scanner inputFile = new Scanner(file);
        
        int totalCount = 0;
        
        // 遍历文件每一行
        while (inputFile.hasNextLine()) {
            String line = inputFile.nextLine();
            
            // 逐字符比对统计当前行的目标字符数量
            for (int i = 0; i < line.length(); i++) {
                if (line.charAt(i) == targetChar) {
                    totalCount++;
                }
            }
        }
        
        // 输出最终统计结果
        System.out.println("The character " + targetChar + " appears " + totalCount + " times in the file.");
        
        // 关闭流资源
        inputFile.close();
        keyboard.close();
    }
}

关键修改说明

  1. 输入逻辑修正:用keyboard.nextLine()读取用户输入的目标字符,通过charAt(0)确保仅获取单个字符,且将该输入放在文件遍历前,符合要求的交互流程。
  2. 计数逻辑修正:将总计数器totalCount初始化在循环外,遍历每一行时用基础for循环逐字符比对,累加目标字符的出现次数。
  3. 循环结构修正:使用while (inputFile.hasNextLine())遍历文件,避免do-while可能出现的文件读取越界问题,确保完整读取所有行。
  4. 输出逻辑修正:仅在统计完所有行后输出一次最终结果,完全匹配要求的输出格式。

内容的提问来源于stack exchange,提问作者K. Stevens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:05