stringbuilder的replace方法按位置替换字符,区间为左闭右开;start≥0且≤长度,end≥start且≤长度,null参数转为"null"字符串。

StringBuilder 的 replace 方法用于替换指定起始和结束位置之间的字符,注意:结束位置是“不包含”的(左闭右开区间)。
replace 方法的基本用法
调用格式为:sb.replace(start, end, str),其中:
- start:起始索引(含),从 0 开始,不能为负数,也不能超过当前字符串长度
- end:结束索引(不含),必须 ≥ start,且最多可等于当前字符串长度(即允许在末尾插入)
- str:用来替换的新字符串,可以为空、null(会被转成 "null")或任意长度
常见使用场景示例
比如原字符串是 "HelloWorld",想把 "World" 替换成 "Java":
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
StringBuilder sb = new StringBuilder("HelloWorld");
sb.replace(5, 10, "Java"); // 从索引5('W')到索引10(末尾)替换
System.out.println(sb); // 输出:HelloJava
再比如只替换中间两个字符:
StringBuilder sb = new StringBuilder("abcdef");
sb.replace(2, 4, "XY"); // 替换索引2~3的"cd"为"XY"
System.out.println(sb); // 输出:abXYef
边界情况要注意
这些情况容易出错,需特别留意:
- 若
start == end,相当于在该位置插入字符串(不删除任何字符) - 若
end > sb.length(),会抛出StringIndexOutOfBoundsException - 若
start > sb.length(),同样抛异常(哪怕 end 更大也不行) - 若传入 null,会自动转成字符串 "null",不是空字符串
和 String.replace 的区别
别混淆:String.replace(char, char) 或 String.replace(CharSequence, CharSequence) 是按内容匹配替换;而 StringBuilder.replace(int, int, String) 是按**位置**替换,不关心内容,也不支持正则或全局匹配。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










