上一篇
Java如何替换字符串
- 后端开发
- 2025-06-08
- 3791
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
类规范。