Java中String不可变,所有替换操作均返回新对象而非修改原字符串;replace系方法按字符/子串/正则替换,substring拼接可手动局部替换,频繁操作应使用StringBuilder提升效率。

Java 中的 String 是不可变的,这意味着一旦创建,它的内容就不能被修改。所谓“替换”,其实是通过方法返回一个**全新的 String 对象**,原对象保持不变。
用 replace、replaceAll、replaceFirst 生成新字符串
这些方法不会改变原字符串,而是返回替换后的新字符串:
-
replace(char oldChar, char newChar):替换所有匹配字符 -
replace(CharSequence target, CharSequence replacement):替换所有子串(推荐用于普通替换) -
replaceAll(String regex, String replacement):基于正则表达式替换(注意转义) -
replaceFirst(String regex, String replacement):只替换第一个匹配项
例如:
String s = "hello";
String t = s.replace('l', 'L'); // 返回 "heLLo",s 仍是 "hello"用 substring + 连接拼出新字符串
当需要局部替换但又不满足内置方法时,可手动截取再拼接:
- 用
substring(0, index)取前半部分 - 用
substring(index + oldLength)取后半部分 - 中间插入新内容,用
+或StringBuilder拼接
例如把第2个字符替换成 'X':
String s = "hello"; String t = s.substring(0, 1) + 'X' + s.substring(2); // "hXllo"
注意:赋值操作 ≠ 修改原对象
常见误区是以为 s = s.replace(...) 改了原对象 —— 实际只是让变量 s 指向新对象,原来的字符串依然存在(除非无引用,等待 GC)。
- 多个变量引用同一字符串时,替换只影响被赋值的那个变量
- 如果想“看起来像在改”,必须显式重新赋值
频繁替换建议用 StringBuilder
如果在循环中多次替换或拼接,直接用 String 会产生大量临时对象,效率低。此时应改用可变的 StringBuilder:
- 调用
setCharAt()、replace()、insert()等方法就地修改 - 最后用
toString()获得最终的不可变 String
例如:
StringBuilder sb = new StringBuilder("hello");
sb.replace(1, 3, "XX"); // 变成 "hXXlo"
String result = sb.toString(); // "hXXlo"Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











