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
相关产品推荐
相关产品推荐

