StringBuilder的insert()在指定索引插入内容并支持链式调用,delete()按前闭后开区间删除子串,deleteCharAt()快捷删单字符,二者均直接修改原对象且非线程安全。

StringBuilder 是 Java 中可变字符串类,适合频繁修改字符串的场景。它提供 insert() 和 delete() 方法,能在指定位置插入或删除字符,不生成新对象,效率比 String 高。
insert():在指定索引处插入内容
语法:sb.insert(int offset, String str),从索引 offset 开始插入字符串(索引从 0 起,最大值为当前长度)。超出范围会抛 StringIndexOutOfBoundsException。
- 支持插入多种类型:除了
String,还可传int、char、boolean等,自动转为字符串形式 - 原 StringBuilder 对象被修改,返回自身(支持链式调用)
- 例如:new StringBuilder("abc").insert(1, "XYZ") → "aXYZbc"
- 在末尾插入:用
insert(sb.length(), "xxx"),等价于append("xxx")
delete():删除指定范围的字符
语法:sb.delete(int start, int end),删除从 start(含)到 end(不含)之间的子串。注意是“前闭后开”区间。
-
start必须 ≥ 0,end不能超过当前长度,且start ≤ end,否则抛异常 - 删除整个内容:用
delete(0, sb.length()) - 删除最后一个字符:用
delete(sb.length()-1, sb.length()) - 例如:new StringBuilder("hello").delete(1, 4) → "ho"(删掉索引 1~3 的 "ell")
deleteCharAt():快捷删除单个字符
如果只需删一个字符,用 deleteCharAt(int index) 更简洁,效果等同于 delete(index, index+1)。
立即学习“Java免费学习笔记(深入)”;
- 例如:sb.deleteCharAt(2) 删除索引为 2 的字符
- 同样要求
index在[0, sb.length())范围内
使用注意和常见误区
这两个方法都直接修改原对象,不会创建新 StringBuilder;若需保留原值,应先用 new StringBuilder(original.toString()) 复制一份。
- 索引越界是运行时异常,建议操作前检查
sb.length() - 插入空字符串(
"")或删除长度为 0 的区间(start == end)是合法的,无实际变化 - 多线程环境下不安全,如需线程安全请改用
StringBuffer


















