stringbuilder.replace() 用于按索引范围替换字符,格式为 replace(int start, int end, string str),其中 start 包含、end 不包含,索引越界会自动修正,不抛异常,且支持链式调用。

StringBuilder.replace() 方法用于替换指定起始和结束位置之间的字符序列,它会删除原范围内的内容,并插入新字符串。
基本用法:明确起始和结束索引
调用格式为:replace(int start, int end, String str)。其中:
- start 是起始索引(包含),从 0 开始计数;
-
end 是结束索引(不包含),即替换范围是
[start, end); - str 是要插入的新字符串,可以为空或 null(null 会被转成字符串 "null")。
例如:
sb.replace(5, 10, "Java"); // 替换索引 5 到 9 的 "World" → "HelloJava"
边界处理:start 和 end 超出范围时的行为
该方法会对索引做自动修正,不会抛异常:
- 如果 start ,会被设为 0;
- 如果 end > length(),会被设为当前长度;
- 若 start > end,则等效于在 start 处插入字符串(不删除任何字符)。
例如:
StringBuilder sb = new StringBuilder("abc");sb.replace(1, 10, "XYZ"); // end 超出,实际替换 [1,3) → "aXYZ"
与 String.replace() 的关键区别
注意这不是全局查找替换,而是基于位置的精确替换:
- 不按子串内容匹配,只看下标范围;
- 不支持正则或模糊匹配;
- 若想按内容替换,需先用
indexOf()找位置,再调用 replace。
例如按内容替换第一次出现的 "aa":
StringBuilder sb = new StringBuilder("aabbccaa");int idx = sb.indexOf("aa");
if (idx != -1) sb.replace(idx, idx + 2, "XX"); // → "XXbbccaa"
常见用途与注意事项
适合需要精准控制修改位置的场景,比如格式化、模板填充、协议拼装等:
- 确保目标范围存在,否则可能误删或误插;
- 替换后 StringBuilder 长度会变化(删掉 end−start 个字符,加上新字符串长度);
- 操作是原地修改,返回 this,支持链式调用。
例如构建带占位符的 SQL:
StringBuilder sql = new StringBuilder("SELECT * FROM users WHERE id = ? AND name = ?");sql.replace(28, 29, "123").replace(47, 48, "'Alice'"); // → 填充参数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











