Matcher类find()与matches()的差别

本篇主要记录java.util.regex.Matcher类find()与matches()的区别

今天在做公司一个小项目的时候偶然发现相同的正则模式,调用find()与matches()出来的结果不一致,困扰了些许时间,就用这篇博客记录一下

首先看代码:

public class RegExTest {
    public static void main(String[] args){
       String str = "122,12,132,912";
       replace(str);
    }
    static void replace(String str){
        Pattern pattern = Pattern.compile("\\b12\\b");
        Matcher matcher = pattern.matcher(str);
        System.out.println("matcher.matches()的结果是:"+(matcher.matches()));
        System.out.println("matcher.find()的结果是:"+(matcher.find()));
        System.out.println("Pattern.matches(\"\\b12\\b\",str)的结果是:"+(Pattern.matches("\\b12\\b",str)));
    }
}

输出的结果是:

matcher.matches()的结果是:false
matcher.find()的结果是:true
Pattern.matches("\b12\b",str)的结果是:false

想要只匹配两个”,”之间的12而避免匹配”122,912”中的12,可以看到只有matcher.find() 的输出为true。先看看官方文档的说明。

  • public boolean find() :尝试查找与该模式匹配的输入序列的下一个子序列。此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
    返回:
    当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。

  • public boolean matches() :尝试将整个区域与模式匹配。
    返回:
    当且仅当整个区域序列匹配此匹配器的模式时才返回 true。

所以find()匹配的是目标序列的子序列,而matches()需要匹配整个目标序列。
Pattern.matches()string.matches() 方法的效果与matcher.matches() 效果相同,匹配整个目标序列。

参考文档:

版权声明:自由转载-非商用-非演绎-保持署名(创意共享3.0许可证)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值