StringBuilder的delete()和insert()方法直接修改原对象:delete(start,end)删除[start,end)字符,insert(offset,str)在offset处插入字符串,二者组合可实现替换效果,操作时需动态关注长度变化。

Java 中 StringBuilder 的 delete() 和 insert() 方法用于高效修改字符串内容,它们直接在原对象上操作,不创建新对象。
delete(int start, int end):删除指定范围的字符
该方法删除从索引 start(包含)到 end(不包含)之间的字符。注意:end 不能超过当前长度,start 不能为负,且 start ≤ end,否则抛出 StringIndexOutOfBoundsException。
- 删除前 3 个字符:
sb.delete(0, 3) - 删除最后一个字符:
sb.delete(sb.length()-1, sb.length()) - 清空全部内容:
sb.delete(0, sb.length())
insert(int offset, String str):在指定位置插入字符串
offset 是插入位置的索引(从 0 开始),插入后原内容向后移动。允许 offset 等于当前长度(即追加到末尾),但不能大于长度或为负。
- 在开头插入:
sb.insert(0, "prefix") - 在末尾插入:
sb.insert(sb.length(), "suffix")或直接用append() - 在第 5 个位置插入:
sb.insert(5, "[middle]")
组合使用 delete 和 insert 实现替换效果
虽然 StringBuilder 没有直接的 replace() 方法(注意不是 String.replace()),但可用 delete + insert 组合模拟:
立即学习“Java免费学习笔记(深入)”;
- 把索引 2 到 4 的字符替换成 "XX":
sb.delete(2, 4).insert(2, "XX") - 等价于:
sb.replace(2, 4, "XX")(StringBuilder实际提供了replace(),但底层就是 delete+insert)
注意事项和常见陷阱
操作时需时刻关注当前 StringBuilder 的长度变化,尤其链式调用后索引会偏移:
- 先
insert()再delete()时,删除的索引要按新长度计算 - 多次修改后建议用
sb.length()动态获取当前长度,避免硬编码索引 - 所有操作均改变原对象,无返回新对象(返回
this,支持链式调用)


















