stringbuilder的replace方法按索引范围替换字符,格式为replace(int start, int end, string str),起始包含、结束不包含;需配合indexof实现按内容替换,且仅单次替换。

StringBuilder 的 replace 方法用于替换指定起始和结束位置之间的字符序列,不支持按内容查找后替换,必须明确给出索引范围。
replace 方法的基本用法
调用格式为:replace(int start, int end, String str)。其中:
- start 是起始索引(包含),从 0 开始计数
-
end 是结束索引(不包含),即替换区间为
[start, end) - str 是用来替换的新字符串,可以为空或任意长度
例如:new StringBuilder("hello world").replace(6, 11, "Java") 会把 "world" 替换为 "Java",结果是 "hello Java"。
常见使用场景与注意事项
该方法适合已知目标位置的情况,比如固定格式文本中替换某一段:
- 若
start或end超出当前长度,会抛出StringIndexOutOfBoundsException - 若
start > end,行为正常但不替换任何内容(相当于插入空串) - 新字符串长度可与原区间不同:变长则后续字符后移,变短则自动压缩
例如:sb.replace(2, 4, "abc") 在 "abcd" 上执行,会变成 "ababcd"(原 [2,4) 是 "cd",替换成 "abc" 后整体拉长)。
配合 indexOf 实现“按内容替换”
如果想根据子串内容定位再替换(类似 String 的 replace),需先找索引:
- 用
indexOf(String str)获取首次出现位置 - 计算结束索引:
start + str.length() - 再调用
replace(start, end, newStr)
示例:将 "apple pie" 中的 "pie" 替换为 "cake":
StringBuilder sb = new StringBuilder(original);
int idx = sb.indexOf("pie");
if (idx != -1) {
sb.replace(idx, idx + 3, "cake"); // 结果为 "apple cake"
}
批量替换或多次替换
replace 方法只替换一次指定区间。如需多次替换相同内容,可用循环结合 indexOf 查找:
- 每次查找到后执行 replace,并更新查找起点(避免重复匹配)
- 注意:replace 后字符串长度变化,下一次查找起点应基于新长度重新计算
更稳妥的做法是用 while 循环,每次从上一次替换位置之后继续搜索,或改用正则(通过 toString().replaceAll() 再重新构造 StringBuilder)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











