码仔ROC 2023-08-08 09:10 采纳率: 50%
浏览 3
已结题

正则表达式,两种方法结果不同

//        String pattern = "[\\u4E00-\\u9FA5]+";
        String pattern = "[\\u4E00-\\u9FFF]+";
String scope = "120万吨";
//第一种
        Pattern p = Pattern.compile(pattern);
        if(p.matcher(scope).find()) {
            System.out.println("2" + scope);
        }else {
            System.out.println("3" + scope);
        }
//第二种
        if(Pattern.matches(pattern, scope)) {
            System.out.println("4" + scope);
        }else {
            System.out.println("5" + scope);
        }

这两种方法有什么区别?为什么结果不一样。

  • 写回答

1条回答 默认 最新

  • 玥轩_521 2023-08-08 09:15
    关注

    援引GPT回答:
    这两种方法的区别在于匹配的方式和返回结果。

    第一种方法使用Pattern类的matcher方法来进行匹配,返回一个Matcher对象。Matcher对象有find()方法,用于判断是否能找到匹配的子序列。如果能找到,则返回true,否则返回false。

    第二种方法使用Pattern类的matches方法来进行匹配,直接返回一个布尔值。matches方法会尝试将整个输入序列与正则表达式进行匹配,只有当整个序列完全匹配才会返回true,否则返回false。

    在这个例子中,第一种方法使用的是find()方法,只要在输入序列中找到任何一个匹配的子序列,就会返回true。而第二种方法使用的是matches()方法,要求整个输入序列完全匹配正则表达式才会返回true。

    根据你提供的例子,使用第一种方法会返回"2" + scope,表示找到了匹配的子序列。而使用第二种方法会返回"5" + scope,表示没有找到完全匹配的子序列。

    原因是因为你的正则表达式"[\u4E00-\u9FFF]+"表示匹配一个或多个汉字,而输入序列"120万吨"中包含了数字和汉字,不是一个完全匹配的子序列。所以第二种方法返回false。而第一种方法使用的是find()方法,只要找到了一个或多个汉字,就会返回true,所以第一种方法返回true。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 已采纳回答 8月8日
  • 创建了问题 8月8日

悬赏问题

  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行