452. Java 正则表达式 - 文本替换
文章目录
- 452. Java 正则表达式 - 文本替换
- 1️⃣ `replaceFirst()` 和 `replaceAll()`
- 功能:
- 示例 1:替换单词 `"dog"` 为 `"cat"`
- 示例 2:使用正则表达式替换
- 2️⃣ `appendReplacement()` 和 `appendTail()`
- 功能:
- 示例:
- 3️⃣ `String` 类中的替换方法
- 示例:
- ✅ 小结
452. Java 正则表达式 - 文本替换
在正则表达式处理中,文本替换是非常常见的操作。Java 提供了多种方式完成替换,从简单的替换到更灵活的逐步替换。
1️⃣replaceFirst()和replaceAll()
功能:
replaceFirst():只替换匹配到的第一个子串replaceAll():替换匹配到的所有子串
示例 1:替换单词"dog"为"cat"
importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassReplaceDemo{privatestaticStringREGEX="dog";privatestaticStringINPUT="The dog says meow. All dogs say meow.";privatestaticStringREPLACE="cat";publicstaticvoidmain(String[]args){Patternp=Pattern.compile(REGEX);Matcherm=p.matcher(INPUT);// 替换所有匹配INPUT=m.replaceAll(REPLACE);System.out.println(INPUT);}}输出结果:
Thecat saysmeow.Allcats say meow.💡说明:
"dog"被替换为"cat"- 如果只想替换第一个匹配,调用
replaceFirst(REPLACE)即可。
示例 2:使用正则表达式替换
importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassReplaceDemo2{privatestaticStringREGEX="a*b";privatestaticStringINPUT="aabfooaabfooabfoob";privatestaticStringREPLACE="-";publicstaticvoidmain(String[]args){Patternp=Pattern.compile(REGEX);Matcherm=p.matcher(INPUT);INPUT=m.replaceAll(REPLACE);System.out.println(INPUT);}}输出结果:
-foo-foo-foo-💡说明:
a*b匹配零个或多个 a 后跟一个 b的模式- 可以看到复杂模式同样可以直接替换
2️⃣appendReplacement()和appendTail()
功能:
- 提供更灵活的替换控制,可逐个处理匹配
- 与
replaceAll()效果相同,但可在替换过程中进行逻辑处理
示例:
importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassRegexDemo{privatestaticStringREGEX="a*b";privatestaticStringINPUT="aabfooaabfooabfoob";privatestaticStringREPLACE="-";publicstaticvoidmain(String[]args){Patternp=Pattern.compile(REGEX);Matcherm=p.matcher(INPUT);StringBuffersb=newStringBuffer();while(m.find()){// 逐个替换匹配m.appendReplacement(sb,REPLACE);}// 将剩余文本追加到 sbm.appendTail(sb);System.out.println(sb.toString());}}输出结果:
-foo-foo-foo-💡说明:
appendReplacement可以在每次匹配时动态生成替换内容appendTail用于追加最后剩余的文本
3️⃣String类中的替换方法
JavaString类提供了和Matcher类等效的方法,使用更简单:
| 方法 | 功能 |
|---|---|
replaceFirst(String regex, String replacement) | 替换第一个匹配子串 |
replaceAll(String regex, String replacement) | 替换所有匹配子串 |
示例:
Stringinput="aabfooaabfooabfoob";Stringresult=input.replaceAll("a*b","-");System.out.println(result);// 输出: -foo-foo-foo-💡说明:
- 内部实现原理与
Pattern.compile(regex).matcher(str).replaceAll()相同 - 适合快速处理简单替换场景
✅ 小结
replaceFirst()/replaceAll()→快速替换,支持正则表达式appendReplacement()/appendTail()→灵活控制每个匹配,可在替换过程中加入逻辑String.replaceFirst()/String.replaceAll()→方便快捷,无需创建Pattern/Matcher
