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(); } }
关键修改说明
- 输入逻辑修正:用
keyboard.nextLine()读取用户输入的目标字符,通过charAt(0)确保仅获取单个字符,且将该输入放在文件遍历前,符合要求的交互流程。 - 计数逻辑修正:将总计数器
totalCount初始化在循环外,遍历每一行时用基础for循环逐字符比对,累加目标字符的出现次数。 - 循环结构修正:使用
while (inputFile.hasNextLine())遍历文件,避免do-while可能出现的文件读取越界问题,确保完整读取所有行。 - 输出逻辑修正:仅在统计完所有行后输出一次最终结果,完全匹配要求的输出格式。
内容的提问来源于stack exchange,提问作者K. Stevens
相关产品推荐
相关产品推荐

