StringBuilder没有setCharAt方法;它仅提供charAt(int index)读取字符,修改需用replace、deleteCharAt加insert等组合操作。

StringBuilder 没有 setCharAt 方法,这是常见误区。它只有 charAt(int index) 用于读取字符,但不提供直接修改指定位置字符的 setCharAt 方法。要修改某位置的字符,需借助 setCharAt 的替代方案——通常是先用 charAt 获取原字符,再用 replace 或 deleteCharAt + insert 实现修改。
用 charAt 读取指定位置的字符
charAt(int index) 和 String 中行为一致:返回索引处的 char,索引从 0 开始,越界抛 StringIndexOutOfBoundsException。
- 确保索引在
0 范围内 - 适用于检查、判断或临时使用某个位置的字符
例如:
StringBuilder sb = new StringBuilder("hello");char c = sb.charAt(1); // 返回 'e'
修改指定位置字符的正确方式
因为没有 setCharAt,常用两种等效做法:
立即学习“Java免费学习笔记(深入)”;
- 用 replace(int start, int end, String str):将单个位置 [i, i+1) 替换为新字符(转成字符串)
- 用 deleteCharAt(i).insert(i, char):先删再插,语义清晰但略冗长
推荐第一种,简洁高效:
StringBuilder sb = new StringBuilder("hello");sb.replace(0, 1, "H"); // 变成 "Hello"
sb.replace(4, 5, "!"); // 变成 "Hell!"
注意边界与空值处理
所有操作前都应校验长度,避免运行时异常:
- 调用
charAt(i)前建议先判断i >= 0 && i -
replace的 start 必须 ≤ end,且 end ≤ length();替换空字符串(如replace(i,i,"x"))等价于插入 - 想“覆盖”而非“插入”,务必保证
end == start + 1
为什么不设计 setCharAt?
StringBuilder 设计侧重高效拼接与批量修改(append、insert、delete),单字符修改属于低频操作。直接暴露可变数组下标易引发误用,而 replace 更明确地表达“替换一段”,语义更安全、更符合其构建器定位。


















