症状
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);
验证
用原先失败的输入与一个更短的字符串分别测试;两者都不抛异常,短输入产生既定的兜底结果或清晰的领域错误。