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

Java如何使用循环将字符串首个出现的小写字母转为大写

代码修正方案

核心问题排查

你的代码存在3个关键错误导致运行结果不符合预期:

  • indexOf、contains方法仅支持精确匹配普通字符串,不支持正则表达式解析,你传入的正则规则会被当做普通字符串查找,这两处判断完全无效
  • 循环逻辑没有做「找到第一个小写后停止转大写」的控制,每遇到小写字符都会执行转大写操作,自然所有小写都被转换
  • 调用userInput.toUpperCase().charAt(i)属于冗余操作,不需要把整个字符串转大写,直接转换当前单个字符即可

你提到的两个困惑也可以直接对应解决:

  • 字符串索引数量不固定没关系,循环条件直接用i < userInput.length()即可,程序会自动适配任意长度的输入字符串
  • 仅修改第一个小写字母的核心是增加状态标记,找到第一个符合要求的字符后修改标记状态,后续遍历不再执行转大写逻辑

修正后可运行代码

import java.util.Scanner;

public class PasswordImprover {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String userInput = sc.next();
        // 状态标记:是否已经找到第一个小写字母
        boolean foundFirstLower = false;
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < userInput.length(); i++) {
            char currentChar = userInput.charAt(i);
            // 仅在未找到第一个小写、且当前字符是小写时做转换
            if (!foundFirstLower && Character.isLowerCase(currentChar)) {
                result.append(Character.toUpperCase(currentChar));
                // 标记已找到,后续字符不再转换
                foundFirstLower = true;
            } else {
                // 其余情况直接拼接原字符
                result.append(currentChar);
            }
        }

        System.out.println(result.toString());
        sc.close();
    }
}

验证效果

输入示例BYus时,运行结果为BYUs,仅第一个小写字母u被转为大写,符合需求。如果输入字符串没有小写字母,会原样输出所有内容。

内容的提问来源于stack exchange,提问作者Wolfie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04