1. 方法概述

replace() 是 Java 中 String 类的核心方法之一,用于批量替换字符串中的内容。它支持两种操作模式:

  • 替换所有出现的指定字符
  • 替换所有出现的指定子字符串

⚠️ 注意:该方法返回的是新字符串,原字符串保持不变(String 的不可变性)

2. 方法签名

public String replace(char oldChar, char newChar)
public String replace(CharSequence target, CharSequence replacement)

✅ 关键点:

  • 第一个重载:字符级替换(char
  • 第二个重载:字符串级替换(CharSequence,支持 String/StringBuilder 等)
  • 两个方法都是全局替换(所有匹配项都会被替换)

3. 使用示例

3.1 字符替换场景

@Test
void whenReplaceOldCharNewChar_thenCorrect() {
    String s = "wslcoms to basldung";

    assertEquals("welcome to baeldung", s.replace('s', 'e'));
}

📝 执行流程:

  1. 扫描字符串中所有 's' 字符
  2. 将每个 's' 替换为 'e'
  3. 返回新字符串 "welcome to baeldung"

3.2 子字符串替换场景

@Test
void whenReplaceTargetReplacement_thenCorrect() {
    String s = "welcome at baeldung, login at your course";

    assertEquals("welcome to baeldung, login to your course", s.replace("at", "to"));
}

📝 执行流程:

  1. 查找所有 "at" 子字符串
  2. 替换为 "to"
  3. 返回新字符串 "welcome to baeldung, login to your course"

4. 常见踩坑点

错误认知replace() 会修改原字符串
实际行为:始终返回新字符串,原字符串不变

错误用法:用 replace() 做正则替换
正确选择:正则替换请用 replaceAll()replaceFirst()

⚠️ 性能提示:对超长字符串频繁调用时,考虑使用 StringBuilder 优化

5. 最佳实践

  1. 链式调用处理复杂替换:
    String result = input.replace(" ", "").replace("\t", "").replace("\n", "");
    
  2. 替换特殊字符时注意转义:
    // 替换反斜杠需要双写
    String path = "C:\\Users\\dev".replace("\\", "/");
    
  3. 空值处理:
    String safeReplace(String str, String target, String replacement) {
        return str == null ? "" : str.replace(target, replacement);
    }