StringBuilder 的 insert 和 delete 方法通过直接操作内部字符数组实现高效动态修改:insert 在指定索引插入数据并自动类型转换,delete 删除 [start, end) 区间字符;二者可组合完成替换、格式化等精准编辑,但需注意边界条件、索引偏移及线程不安全问题。

Java 中 StringBuilder 的 insert 和 delete 方法是动态修改字符串内容的核心工具,它们直接操作内部字符数组,不创建新对象,效率高且灵活。
insert:在指定位置插入任意类型数据
insert(int offset, ...) 方法把新内容插入到索引 offset 处(从 0 开始),原位置及之后的字符自动后移。支持插入 String、char、int、boolean 等多种类型,内部会自动调用 String.valueOf() 转换。
- 插入位置必须满足
0 ≤ offset ≤ length(),超出范围抛StringIndexOutOfBoundsException - 插入空字符串或
null(如insert(0, null))会插入字符串"null" - 常用写法示例:
sb.insert(3, "xyz")→ 在第 4 个字符前插入 "xyz"sb.insert(sb.length(), "end")→ 相当于append("end")
delete:删除指定范围的字符
delete(int start, int end) 删除从 start(含)到 end(不含)之间的字符。注意 end 是“排除端点”,不是长度。
-
start必须 ≥ 0,end必须 ≤ 当前长度,且start ≤ end,否则抛异常 - 删除整个内容可写成
delete(0, sb.length()),等价于setLength(0) - 想删最后一个字符:用
delete(sb.length()-1, sb.length())
组合使用 insert 和 delete 实现精准编辑
单独调用不如组合灵活。比如“替换某一段”本质是先 delete 再 insert,或用 replace(它内部就是 delete + insert)。
立即学习“Java免费学习笔记(深入)”;
- 把索引 2~4 的字符替换成 "NEW":
sb.delete(2, 5).insert(2, "NEW") - 在每两个字符之间插入分隔符(如 "ab" → "a,b"):
从后往前遍历插入,避免索引偏移:for (int i = sb.length() - 1; i > 0; i--) { sb.insert(i, ","); } - 删除所有空格再在单词间加单个空格:
先delete所有空格(需循环或正则配合toString().replaceAll()),再按需insert
注意事项与常见陷阱
这两个方法虽简单,但边界和副作用容易出错。
- 方法调用后返回的是当前
StringBuilder对象(支持链式调用),但不要误以为返回了新对象 - 多次
insert后再delete,要注意当前长度已变,原索引可能失效 - 多线程环境下不能直接共享使用同一个
StringBuilder,它不是线程安全的;需要同步或改用StringBuffer - 如果只是简单拼接,优先用
append();只有真需中间插入/删除时才用insert/delete


















