上一篇
Java如何替换字符串
- 后端开发
- 2025-06-08
- 3871
Java中字符串替换常用String类的replace、replaceAll和replaceFirst方法,replace直接替换字符序列,replaceAll基于正则表达式替换全部匹配项,replaceFirst仅替换首个匹配项,注意这些方法返回新字符串,原始字符串不变。
核心替换方法
replace():基础字符/字面替换
- 功能:替换所有匹配的字面值(不支持正则)。
- 示例:
String original = "apple, banana, apple"; String replaced = original.replace("apple", "orange"); // 结果:"orange, banana, orange" - 适用场景:简单文本替换(如更改固定关键词)。
replaceAll():正则表达式全局替换
- 功能:基于正则表达式替换所有匹配项。
- 示例(移除所有数字):
String text = "ID: 123, Code: 456"; String result = text.replaceAll("\d+", ""); // 结果:"ID: , Code: "(正则中\d+匹配连续数字) - 转义提示:正则特殊字符需转义(如 →
\.)。
replaceFirst():正则首项替换
- 功能:仅替换首个正则匹配项。
- 示例:
String log = "Error: 404; Error: 500"; String fixed = log.replaceFirst("Error", "Warning"); // 结果:"Warning: 404; Error: 500"
进阶替换技巧
StringBuilder:高性能动态替换
- 适用场景:大文本或多轮替换(避免
String不可变导致的性能损耗)。 - 示例:
StringBuilder sb = new StringBuilder("Hello World"); int start = sb.indexOf("World"); int end = start + "World".length(); sb.replace(start, end, "Java"); // 结果:"Hello Java"
Apache Commons Lang 工具库
- 优势:简化复杂逻辑,支持
null安全处理。 - 依赖添加(Maven):
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> - 示例:
import org.apache.commons.lang3.StringUtils; String text = "I use Java, Java is great."; String result = StringUtils.replace(text, "Java", "Python"); // 结果:"I use Python, Python is great."
关键注意事项
-
正则表达式陷阱:
- 特殊字符需转义:
replaceAll("." , "x")会替换所有字符(在正则中匹配任意字符),正确写法:replaceAll("\.", "x")。 - 性能影响:复杂正则可能导致回溯问题(如嵌套量词)。
- 特殊字符需转义:
-
区分大小写:

- 默认区分大小写,需忽略大小写时用正则:
"Hello World".replaceAll("(?i)world", "Java"); // 结果:"Hello Java"
- 默认区分大小写,需忽略大小写时用正则:
-
性能对比:
| 方法 | 10万次执行耗时(示例) | 适用场景 |
|——————–|————————|————————|
|replace()| ~15ms | 简单字面替换 |
|replaceAll()| ~120ms | 需正则匹配 |
|StringBuilder| ~10ms | 循环或大文本操作 |
-
空指针安全:
- 建议前置检查:
if (original != null) { original.replace(...); } - 或用
StringUtils.replace()(自动处理null)。
- 建议前置检查:
最佳实践总结
| 场景 | 推荐方法 |
|---|---|
| 简单文本替换 | replace() |
| 正则匹配全局替换 | replaceAll() |
| 仅替换首个匹配项 | replaceFirst() |
| 循环内或超大文本替换 | StringBuilder |
| 工程化项目(需健壮性) | Apache Commons Lang 的StringUtils |
引用说明:本文代码示例基于 Oracle 官方 Java 17 文档,Apache Commons Lang 功能参考自 Apache Commons Lang 3.12官方文档,正则表达式语法遵循 Java
Pattern类规范。

