stringbuilder的replace方法按索引区间替换字符,调用格式为replace(int start, int end, string str),将[start, end)内子串替换为str,要求0≤start≤end≤length(),否则抛异常;str为null时抛nullpointerexception;该方法不匹配内容,仅位置操作,适合精准编辑。

Java中StringBuilder的replace方法用于替换指定区间内的字符,不是按内容查找替换,而是按索引位置截取再替换成新字符串。
replace方法的基本用法
StringBuilder.replace(int start, int end, String str) 会将从start(含)到end(不含)之间的子串,替换成str。注意:start和end必须满足 0 ≤ start ≤ end ≤ length(),否则抛StringIndexOutOfBoundsException。
- start为起始索引(从0开始),end为结束索引(不包含该位置)
- 原内容在[start, end)范围内被完全删除,再插入str
- 如果str为null,会抛NullPointerException
常见替换场景示例
比如把“HelloWorld”中第5~10位(即"World")替换成"Java":
StringBuilder sb = new StringBuilder("HelloWorld");sb.replace(5, 10, "Java"); // 结果为 "HelloJava"
再比如把开头两个字符替换成空字符串(相当于删除前两位):
也可以用replace实现“插入”效果:在末尾插入,只需让start == end(区间为空):
sb.replace(sb.length(), sb.length(), "!"); // 在末尾加"!"与String.replace的区别
String.replace(CharSequence target, CharSequence replacement) 是按内容匹配替换,支持全量或首次替换;而StringBuilder.replace是纯位置操作,不关心内容,也不自动循环匹配。想实现类似String.replaceAll的效果,需配合indexOf手动循环查找+replace。
- StringBuilder.replace适合已知位置的精准替换或编辑
- 若需按内容替换,建议先用indexOf找位置,再调replace
- 频繁按内容替换时,考虑是否真的需要StringBuilder——有时直接用String更清晰
注意事项和易错点
容易忽略索引边界,尤其end超出length()或start > end时会异常;另外replace后StringBuilder对象本身被修改,返回的是this,可链式调用但要注意原对象已变。
- 替换后length()会变化:新字符串长度可能≠原区间长度
- 多次replace时,前面操作会影响后续索引位置,需重新计算
- 线程不安全,多线程环境下需同步或换用StringBuffer
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











