news 2026/7/3 18:38:21

452. Java 正则表达式 - 文本替换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()相同
  • 适合快速处理简单替换场景

✅ 小结

  1. replaceFirst()/replaceAll()快速替换,支持正则表达式
  2. appendReplacement()/appendTail()灵活控制每个匹配,可在替换过程中加入逻辑
  3. String.replaceFirst()/String.replaceAll()方便快捷,无需创建Pattern/Matcher
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 18:35:26

NBTExplorer:5分钟快速上手Minecraft数据编辑的终极免费工具

NBTExplorer:5分钟快速上手Minecraft数据编辑的终极免费工具 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer NBTExplorer是一款专为Minecraft玩家和开发…

作者头像 李华
网站建设 2026/7/3 18:34:48

Claude Code CLI 接入 DeepSeek 实战指南:零GUI、低延迟AI编程工作流

1. 项目概述:这不是“换API地址”那么简单,而是一次开发工作流的底层重定向“Claude Code 接入 DeepSeek,纯小白 30 分钟拥有自己的 AI 编程助手”——这个标题里藏着三个关键误读点,我得先掰开揉碎说清楚,否则你照着网…

作者头像 李华
网站建设 2026/7/3 18:33:24

NoFences:开源免费的Windows桌面栅栏工具,终结桌面混乱时代

NoFences:开源免费的Windows桌面栅栏工具,终结桌面混乱时代 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上杂乱无章的图标…

作者头像 李华