字符串替换是 Java 开发中最高频的操作之一,比如数据脱敏、模板渲染、文本清洗、参数替换等场景都离不开它。Java 的
String类内置了多种替换方法,同时也支持正则表达式、批量替换等进阶操作。本文从基础方法到复杂场景,拆解字符串替换的核心用法与避坑要点。
Java String 类提供了 3 个核心替换方法,三者的核心区别在于是否支持正则表达式、替换范围,具体对比如下:
replace() 有两个重载版本:
replace(char oldChar, char newChar):替换所有指定字符;
replace(CharSequence target, CharSequence replacement):替换所有指定字符串。
实例 1:替换单个字符
public class StringReplaceDemo {public static void main(String[] args) {String str = "Java is easy, Java is fun";
实例 2:替换字符串(非正则)
public class StringReplaceDemo {public static void main(String[] args) {String str = "2025-12-10";
关键注意:replace() 不解析正则表达式!比如传入 replace(".", "*"),会替换所有.字符,而非正则中的 “任意字符”。
replaceAll() 支持正则表达式匹配,适合复杂规则的替换(如数字脱敏、格式转换)。
*实例 1:数据脱敏(替换所有数字为)**
public class StringReplaceDemo {public static void main(String[] args) {String phone = "手机号:13812345678";
实例 2:正则分组替换(日期格式转换)
public class StringReplaceDemo {public static void main(String[] args) {String date = "2025-12-10";
实例 3:转义特殊字符(.、*、| 等)
正则中
.表示 “任意字符”,若需替换普通
.,需用
\\.转义,或用
Pattern.quote()包裹目标字符串:
public class StringReplaceDemo {public static void main(String[] args) {String str = "www.baidu.com";
适合只需替换首次出现的内容,比如修正文本中第一个错误字符、提取首个参数等。
public class StringReplaceDemo {public static void main(String[] args) {String str = "a1b2c3d4";
若需替换时忽略字符大小写(如把AbC/ABC/abc都替换为xyz),可借助正则的(?i)标记(忽略大小写):
public class StringReplaceDemo {public static void main(String[] args) {String str = "AbC123abc456ABC";
开发中常遇到 “{name} 你好,今天是 {date}” 这类模板,需批量替换占位符,可结合Map+ 循环实现:
import java.util.HashMap;
import java.util.Map;public class TemplateReplaceDemo {public static void main(String[] args) {
进阶优化:高频模板替换可使用 Apache Commons Text 的StrSubstitutor,简化代码:
比如同时替换文本中的 “垃圾”“脏话” 等敏感词,用Map存储替换规则,循环调用replace():
import java.util.HashMap;
import java.util.Map;public class MultiReplaceDemo {public static void main(String[] args) {String content = "这是垃圾内容,包含脏话!";Map<String, String> sensitiveWords = new HashMap<>();sensitiveWords.put("垃圾", "**");sensitiveWords.put("脏话", "##");String cleanContent = content;for (Map.Entry<String, String> entry : sensitiveWords.entrySet()) {cleanContent = cleanContent.replace(entry.getKey(), entry.getValue());}System.out.println(cleanContent);
替换空字符串或 null 为默认值,需先判空避免空指针:
public class EmptyReplaceDemo {public static void main(String[] args) {String str = "";
String是不可变对象,所有替换方法都会返回新字符串,原字符串不会改变,必须接收返回值
使用replaceAll()/replaceFirst()时,若目标字符串包含.*+?|()[]{}^$等正则特殊字符,未转义会导致替换结果异常:
若需多次替换(如循环中替换),String的不可变性会创建大量临时对象,建议改用StringBuilder:
调用替换方法前,务必检查字符串是否为 null:
public static String safeReplace(String str, String oldStr, String newStr) {if (str == null || oldStr == null || newStr == null) {return str;
结合正则替换实现常见的脱敏需求:
public class DataMaskDemo {
Java 字符串替换的核心是根据场景选择合适的方法:
- 简单替换(字符 / 固定字符串):用
replace(),性能高且无需考虑正则;
- 复杂规则替换(正则匹配):用
replaceAll()/replaceFirst(),注意特殊字符转义;
- 批量 / 模板替换:结合
Map循环或第三方库(如 Apache Commons Text);
- 高频替换:优先用
StringBuilder提升性能,避免频繁创建 String 对象。