Java实现字符串每个单词首字母大写功能测试用例不通过问题排查
问题代码错误原因定位
- 错误1:未做空输入校验,当传入空字符串
""或者null时,代码第一行调用s.charAt(0)会直接抛出StringIndexOutOfBoundsException异常。 - 错误2:未处理字符串末尾带空格的场景,比如输入
"hello world ",当循环走到最后一个空格下标时,执行s.charAt(i+1)会超出字符串长度范围,触发下标越界异常。 - 错误3:连续多空格分隔单词的场景处理异常,比如输入
"i love java"(两个空格分隔i和love)、开头有多个空格的输入,原有跳下标逻辑会丢失单词首字母大写的转换规则,甚至触发越界问题。
修复后代码
class Solution { public String transform(String s) { // 优先处理异常输入 if (s == null || s.length() == 0) { return s; } StringBuilder res = new StringBuilder(); // 标记下一个非空格字符是否需要转大写,首字符默认需要转大写 boolean nextUpperCase = true; for (char c : s.toCharArray()) { if (c == ' ') { res.append(c); nextUpperCase = true; } else { if (nextUpperCase) { res.append(Character.toUpperCase(c)); nextUpperCase = false; } else { res.append(c); } } } return res.toString(); } }
修复逻辑采用标记位替代原有的直接跳下标操作,完全规避越界风险,同时兼容空输入、首尾空格、多空格分隔的所有场景,原有可通过的单空格分隔测试用例也能正常运行。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

