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

Java字符统计程序输入格式适配问题求助

解决Java字符统计程序的输入格式兼容问题

核心问题分析

原代码的问题在于:

  • 固定用scnr.next()获取第一个字符,只能处理「字符 字符串」的输入顺序,无法识别逆序场景
  • 重载方法无法解决输入拆分错误的根本问题,因为输入本身就没被正确拆分成字符和字符串两部分

解决方案思路

要同时支持两种输入格式,关键在于正确识别输入中的单个字符和字符串,步骤如下:

  1. 读取整行输入,避免next()只截取单个单词的问题
  2. 处理带逗号的输入(如"字符串, 字符"),先移除逗号并清理空格
  3. 判断输入的顺序:
    • 情况1:输入开头是单个字符,剩余部分为字符串
    • 情况2:输入结尾是单个字符,剩余部分为字符串
  4. 调用题目要求的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:08:10