← 中文资源

简体中文版本

Java StringIndexOutOfBoundsException

修复 Java 的 StringIndexOutOfBoundsException:substring 与 charAt 索引越界或未校验输入长度。

阅读英文原文

症状

substring 或 charAt 调用抛出 StringIndexOutOfBoundsException: begin 0, end 5, length 3。它出现在短或空输入上,而更长的值正常。

诊断

先读取异常中的边界值并检查长度:

String s = readInput();
System.out.println(s.length());
String head = s.substring(0, Math.min(5, s.length()));

若来源是用户输入或 split 结果,空值是预期之内的。

修复

提取前做校验或截断:

if (s.isBlank()) {
    throw new IllegalArgumentException("empty input");
}
int end = Math.min(5, s.length());
String head = s.substring(0, end);

char first = s.isEmpty() ? '\0' : s.charAt(0);

验证

用原先失败的输入与一个更短的字符串分别测试;两者都不抛异常,短输入产生既定的兜底结果或清晰的领域错误。