文章目录450. Java 正则表达式 - Matcher 类详解1️⃣ 索引方法Index Methods示例2️⃣ 查找方法Study Methods示例3️⃣ 替换方法Replacement Methods示例 1replaceAll示例 2appendReplacement appendTail示例 3quoteReplacement 小结450. Java 正则表达式 - Matcher 类详解Matcher类是 Java 正则表达式中非常核心的类它提供了定位、匹配和替换等丰富功能。1️⃣ 索引方法Index Methods这些方法帮助你找到匹配内容在字符串中的起始位置和结束位置。方法说明int start()返回上一次匹配的起始索引int start(int group)返回指定捕获组的起始索引int end()返回上一次匹配的结束索引即匹配的最后一个字符的下一个位置int end(int group)返回指定捕获组的结束索引示例importjava.util.regex.*;publicclassMatcherIndexDemo{publicstaticvoidmain(String[]args){Stringinputcat dog cat;PatternpatternPattern.compile((cat));Matchermatcherpattern.matcher(input);while(matcher.find()){System.out.println(Found matcher.group(1) from matcher.start(1) to matcher.end(1));}}}输出Foundcatfrom0to3Foundcatfrom8to11 说明matcher.group(1)对应第一个捕获组(cat)start()和end()返回精确的索引位置方便提取或替换匹配内容2️⃣ 查找方法Study Methods这些方法判断是否存在匹配并可以控制匹配范围。方法说明boolean lookingAt()从输入开头开始匹配部分匹配成功即返回trueboolean find()查找下一个匹配boolean find(int start)从指定索引start开始查找下一个匹配boolean matches()匹配整个输入完全匹配才返回true示例PatternpatternPattern.compile(\\d);Matchermatcherpattern.matcher(123abc456);// lookingAtSystem.out.println(matcher.lookingAt());// true开头是数字// findwhile(matcher.find()){System.out.println(Found: matcher.group() at matcher.start()-matcher.end());}// matchesMatchermatcher2pattern.matcher(123);System.out.println(matcher2.matches());// true整个字符串是数字3️⃣ 替换方法Replacement MethodsMatcher提供了丰富的方法替换匹配内容适合文本处理。方法说明appendReplacement(StringBuffer sb, String replacement)非终结替换用于循环替换部分匹配appendTail(StringBuilder sb)终结替换把剩余未匹配部分追加到结果replaceAll(String replacement)替换所有匹配replaceFirst(String replacement)替换第一个匹配static quoteReplacement(String s)将替换字符串转为字面量字符串避免$或\被误解示例 1replaceAllStringinputcat dog cat;PatternpatternPattern.compile(cat);Matchermatcherpattern.matcher(input);Stringresultmatcher.replaceAll(lion);System.out.println(result);// 输出 lion dog lion示例 2appendReplacementappendTailStringinputone:two:three;PatternpatternPattern.compile(:);Matchermatcherpattern.matcher(input);StringBuffersbnewStringBuffer();while(matcher.find()){matcher.appendReplacement(sb,|);// 替换每个冒号为 |}matcher.appendTail(sb);// 添加剩余字符串System.out.println(sb.toString());// 输出 one|two|three示例 3quoteReplacementStringinputprice: $100;PatternpatternPattern.compile(\\$\\d);Matchermatcherpattern.matcher(input);// 使用字面量替换避免 $ 被当作正则组StringreplacementMatcher.quoteReplacement($200);Stringresultmatcher.replaceAll(replacement);System.out.println(result);// 输出 price: $200 说明quoteReplacement很重要避免$被当作分组引用appendReplacementappendTail可用于复杂替换逻辑 小结索引方法快速定位匹配位置查找方法灵活判断匹配支持部分匹配和整体匹配替换方法替换字符串、循环替换、字面量替换文本处理利器✅ 小技巧replaceAll适合简单替换appendReplacement appendTail适合复杂替换和按条件替换