string.charat()越界时抛stringindexoutofboundsexception,必须提前预防;安全调用需先判null、再验索引∈[0, length),可用默认值返回或optional封装。

Java中String.charAt()方法在索引超出字符串有效范围(即小于0或大于等于字符串长度)时,会直接抛出StringIndexOutOfBoundsException。它不会返回null或默认值,而是强制中断执行——所以“处理越界”本质上是**提前预防**,而不是事后捕获。
检查索引合法性再调用
最稳妥的方式是在调用charAt()前手动验证索引是否在合法范围内:
- 确保
index >= 0 - 确保
index
例如:
String s = "hello"; int index = 10; if (index >= 0 && index
封装安全的取字符工具方法
如果项目中频繁需要安全访问字符,可封装一个带默认返回值的工具方法:
public static char safeCharAt(String str, int index, char defaultValue) {
if (str == null || index = str.length()) {
return defaultValue;
}
return str.charAt(index);
}
// 使用示例
char c = safeCharAt("abc", 5, '?'); // 返回 '?'
用Optional体现可能为空的语义(Java 8+)
更函数式、更明确表达“可能不存在”的场景,可用Optional封装:
public static Optional<character> charAtOpt(String str, int index) {
if (str != null && index >= 0 && index opt = charAtOpt("test", 10);
opt.ifPresentOrElse(
c -> System.out.println("字符:" + c),
() -> System.out.println("索引无效")
);
</character>
避免常见误判:空字符串和null
越界问题常伴随空值处理遗漏,需一并检查:
-
str == null→ 直接报NPE(比越界更早发生) -
str.length() == 0→ 任何非负索引都越界(因为合法索引范围是[0, -1],即空集)
因此完整防御应包含null判断和长度判断,顺序不能颠倒(先判null,再调用length())。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











