Java字符统计程序输入格式适配问题求助
解决Java字符统计程序的输入格式兼容问题
核心问题分析
原代码的问题在于:
- 固定用
scnr.next()获取第一个字符,只能处理「字符 字符串」的输入顺序,无法识别逆序场景 - 重载方法无法解决输入拆分错误的根本问题,因为输入本身就没被正确拆分成字符和字符串两部分
解决方案思路
要同时支持两种输入格式,关键在于正确识别输入中的单个字符和字符串,步骤如下:
- 读取整行输入,避免
next()只截取单个单词的问题 - 处理带逗号的输入(如"字符串, 字符"),先移除逗号并清理空格
- 判断输入的顺序:
- 情况1:输入开头是单个字符,剩余部分为字符串
- 情况2:输入结尾是单个字符,剩余部分为字符串
- 调用题目要求的
calcNumCharacters方法统计次数,最后生成符合格式的输出
完整实现代码
import java.util.Scanner; public class LabProgram { // 题目要求的指定方法:返回字符在字符串中的出现次数 public static int calcNumCharacters(String userString, char userChar) { int count = 0; for (int i = 0; i < userString.length(); i++) { if (userString.charAt(i) == userChar) { count++; } } return count; } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); // 读取整行输入,去除首尾空格 String fullInput = scnr.nextLine().trim(); char targetChar = ' '; String targetString = ""; // 先处理带逗号的情况,移除逗号并重新清理空格 fullInput = fullInput.replace(",", "").trim(); // 检查输入的第一个部分是否是单个字符 if (fullInput.length() >= 1) { String firstPart = fullInput.split("\\s+", 2)[0]; if (firstPart.length() == 1) { // 情况1:字符在前,字符串在后 targetChar = firstPart.charAt(0); targetString = fullInput.substring(1).trim(); } else { // 情况2:字符串在前,字符在后(取最后一个字符) targetChar = fullInput.charAt(fullInput.length() - 1); targetString = fullInput.substring(0, fullInput.length() - 1).trim(); } } // 调用指定方法统计次数 int count = calcNumCharacters(targetString, targetChar); // 生成符合格式的输出 String output = count + " " + targetChar; if (count != 1) { output += "'s"; } System.out.println(output); scnr.close(); } }
代码说明
- 输入处理:用
nextLine()读取整行,避免拆分错误;移除逗号并清理空格,兼容带逗号的逆序输入 - 顺序判断:通过拆分第一个部分判断是否为单个字符,区分两种输入顺序;逆序场景直接取最后一个字符作为目标字符
- 指定方法:严格实现题目要求的
calcNumCharacters方法,仅负责统计次数,符合单一职责 - 输出格式:根据次数自动处理复数形式,满足题目要求的大小写敏感统计
内容的提问来源于stack exchange,提问作者Isaac Garcia
相关产品推荐
相关产品推荐

