StringBuilder的delete和replace方法基于左闭右开索引原地修改:delete(start,end)删除指定区间,replace(start,end,str)先删后插;二者均不创建新对象、支持链式调用,但需注意索引偏移与性能优化。

Java 中用 StringBuilder 的 delete 和 replace 方法修改字符串,核心是理解它们的索引范围(左闭右开)和原地修改特性——不产生新对象,比拼接字符串高效得多。
delete:精准删掉一段字符
delete(int start, int end) 删除从索引 start(含)到 end(不含)之间的字符。注意 end 不能超过当前长度,否则抛 StringIndexOutOfBoundsException。
- 想删掉前 3 个字符:`sb.delete(0, 3)`
- 想删掉最后 2 个字符:`sb.delete(sb.length() - 2, sb.length())`
- 想清空全部内容:`sb.delete(0, sb.length())`(比
setLength(0)稍慢,但语义清晰)
replace:用新文本覆盖指定区间
replace(int start, int end, String str) 把 [start, end) 区间替换成字符串 str。它本质是先删后插,所以也遵循左闭右开规则。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 把第 5 到第 8 位(索引 4~7)换成 "XYZ":`sb.replace(4, 8, "XYZ")`
- 只删不加(等效于 delete):`sb.replace(start, end, "")`
- 在末尾追加(类似 append):`sb.replace(sb.length(), sb.length(), "new")`
组合使用更灵活
单独调用 delete 或 replace 很常见,但组合起来能处理更复杂场景,比如动态修正格式:
立即学习“Java免费学习笔记(深入)”;
- 把电话号码中间 4 位打码:
sb.replace(3, 7, "****") - 删掉所有空格再统一加连字符:
sb.delete(0, sb.length()).append("123-456-7890")(注意:这不是 replace/delete 的组合,而是重置+重建;真要删空格可用deleteCharAt配合循环,或先转 String 用replaceAll再重赋值) - 实际建议:对简单区间操作优先用
replace,它一步到位;若只是删除且后续要插入不同内容,分两步delete+insert更清晰
注意事项和性能提示
这两个方法都直接修改原 StringBuilder 对象,返回的是 this,支持链式调用,但要注意索引随内容变化而偏移:
- 连续多次操作时,先算好原始索引,或按从后往前顺序操作,避免因前面删除导致后续索引错位
- 如果只是替换固定位置的少量字符,
replace比delete + insert少一次数组复制,略快 - 别在循环里反复调用
delete(0, sb.length())清空;改用sb.setLength(0)更轻量

















