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

如何修复Java代码中触发的String index out of bounds exception (charAt)异常?

修复StringIndexOutOfBoundsException异常的方案

这个问题我之前排查过好几次!咱们先拆解下异常原因:你看到的StringIndexOutOfBoundsException: String index out of range: 0,本质是你尝试访问一个空字符串的第0位字符——空字符串的长度是0,根本没有索引0的位置,自然就报错了。

为什么会出现这种情况?结合你的输入来看,大概率是reader.nextLine()读取到了空行(比如输入时不小心按了回车,或者输入内容里包含空白行),这时候example变量就变成了长度为0的空字符串,再调用charAt(0)就触发了异常。

修复代码的两种思路

思路1:先检查字符串是否为空,再操作

在调用charAt(0)之前,先判断字符串长度是否大于0,或者是否为空:

while (reader.hasNext()) { 
    String example = reader.nextLine(); 
    // 先处理空行:如果字符串为空,直接跳过本次循环
    if (example.isEmpty()) {
        continue;
    }
    if (example.charAt(0) == '.') { 
        break; 
    } else { 
        if (test(example)) { 
            System.out.println("ok"); 
        } else { 
            System.out.println("no"); 
        } 
    } 
}

思路2:同时判断长度和首字符(更紧凑)

把长度判断和首字符判断合并到同一个条件里,避免额外的分支:

while (reader.hasNext()) { 
    String example = reader.nextLine(); 
    // 只有当字符串非空且首字符是'.'时才break
    if (example.length() > 0 && example.charAt(0) == '.') { 
        break; 
    } else if (!example.isEmpty()) { 
        // 只对非空字符串执行test逻辑
        if (test(example)) { 
            System.out.println("ok"); 
        } else { 
            System.out.println("no"); 
        } 
    }
    // 空行直接跳过,不做任何处理
}

额外优化建议

如果输入中可能存在全是空格的行(比如用户输入了一堆空格后回车),可以先对字符串做trim()处理,把前后空白去掉后再判断是否为空:

String example = reader.nextLine().trim();
if (example.isEmpty()) {
    continue;
}

这样就能避免把全空格的行当成有效行处理,也能防止这类行触发后续的索引异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:37:46