StringBuilder的delete方法删除指定索引范围内字符(左闭右开),接受start和end参数,返回自身支持链式调用,不创建新对象;索引越界抛StringIndexOutOfBoundsException,等价于deleteCharAt(index)为delete(index, index+1)。

StringBuilder 的 delete 方法用于删除指定索引范围内的字符,左闭右开(包含起始索引,不包含结束索引)。它接受两个 int 参数:start 和 end,返回当前 StringBuilder 对象本身(支持链式调用),不会创建新对象。
delete 方法的基本用法
调用格式为 sb.delete(start, end),其中:
- start:要删除的第一个字符的索引(从 0 开始),必须 ≥ 0 且 ≤ 当前长度
- end:要删除的最后一个字符的后一个位置(即不包含该索引处的字符),必须 ≥ start 且 ≤ 当前长度
- 若 start == end,不删除任何字符,返回原对象
- 索引越界(如负数、超过 length())会抛出
StringIndexOutOfBoundsException
常见删除场景示例
假设 StringBuilder sb = new StringBuilder("HelloWorld");(长度为 10):
-
sb.delete(0, 5)→ 删除索引 0~4("Hello"),结果为"World" -
sb.delete(5, 10)→ 删除索引 5~9("World"),结果为"Hello" -
sb.delete(2, 2)→ start 等于 end,字符串不变 -
sb.delete(sb.length() - 3, sb.length())→ 删除末尾 3 个字符(安全写法,避免硬编码)
与 deleteCharAt 的区别
deleteCharAt(int index) 是删除单个字符的快捷方式,等价于 delete(index, index + 1):
立即学习“Java免费学习笔记(深入)”;
-
sb.deleteCharAt(3)相当于sb.delete(3, 4) - 两者都修改原对象,都返回 this,都可能抛出异常
- 批量删除连续字符优先用
delete(start, end),更直观高效
使用时的注意事项
实际编码中需注意边界和可读性:
- 建议先校验索引有效性,尤其在动态计算 start/end 时(如截取用户输入的某段)
- 删除后 StringBuilder 长度会实时更新,后续操作需基于新长度重新计算索引
- 如果需要保留原内容,应先调用
toString()或构造新 StringBuilder 备份 - 链式调用很常见,例如:
sb.delete(0, 4).insert(0, "Hi ").append("!")


















