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

Java调用String.charAt()抛出StringIndexOutOfBoundsException异常求解

异常产生原因

你代码里的sentence.charAt(0)本身没有问题,本次异常是循环逻辑的边界设置错误导致的,具体原因如下:

  • 循环边界设置错误:Java字符串的索引范围为0 ~ 字符串长度-1,你的for循环条件写为i <= sentence.length(),当i等于字符串长度时,调用sentence.charAt(i)就会触发越界。你测试用的"Hello World!"总长度为12,最大合法索引是11,当i取12时就抛出了提示里的索引12越界异常。
  • 存在潜在边界风险:就算你把循环条件修正为i < sentence.length(),如果输入字符串的末尾是空格,命中空格判断后执行sentence.charAt(i+1)时,i+1会等于字符串长度,同样会触发越界。

修复后的代码示例

public class Main {
    public static void main (String[] args) {
        System.out.println(generateFromSentence("Hello World!"));
    }
    public static String generateFromSentence(String sentence) {
        // 增加输入合法性校验,避免空字符串初始化时越界
        if (sentence == null || sentence.isEmpty()) {
            return "";
        }
        StringBuilder output = new StringBuilder(String.valueOf(sentence.charAt(0)));
        // 循环上限调整为length()-1,保证i+1不会越界
        for (int i = 0; i < sentence.length() - 1; i++) {
            if (sentence.charAt(i) == ' '){
                output.append(sentence.charAt(i+1));
            }
        }
        return output.toString();
    }
}

修复说明:

  1. 新增输入非空校验,避免输入空字符串时初始化output的步骤就触发越界
  2. 循环上限调整为sentence.length() - 1,既避免了i本身越界,也保证i+1始终在合法索引范围内
  3. 用StringBuilder代替String拼接,字符串拼接场景下性能更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:01