java正则匹配Matcher类的matches()、lookingAt()和find()和String类的matches()使用

2023-05-16

String类的matches()使用
matches()方法为全局匹配,如果正则能把整个字符串匹配上则返回true,否则返回false

        String value4 = "11111111112";
        if (value4.matches("\\d+")) {
            System.out.println("matches匹配成功");
        }else{
            System.out.println("matches匹配失败");
        }

        String value5 = "11111111112QWE";
        if (value5.matches("\\d+")) {
            System.out.println("matches匹配成功");
        }else{
            System.out.println("matches匹配失败");
        }
       

运行结果:
matches匹配成功
matches匹配失败

Matcher类的matches()使用

matches()方法也为全局匹配,使用方式和String的matches()相似,具体不同点从网上查询到有性能方面差异,Matcher类的matches()方法较快。(必须全局匹配)

        String value2 = "123456789";
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(value2);

        if (m.matches()) {
            System.out.println("matches匹配到的内容:" + m.group());
            System.out.println("matches匹配成功");
        } else {
            System.out.println("matches匹配失败");
        }

运行结果:
matches匹配到的内容:123456789
matches匹配成功

Matcher类的find()使用

find()方法是局部匹配,如果匹配成功则返回true,如果find方法调用第二次,则匹配的位置会继续向下匹配。(不可用全局匹配)

String value = "123AAA456789BBBC";
        Pattern pattern = Pattern.compile("[1-9]\\d{2}");
        Matcher matcher = pattern.matcher(value);

        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }else {
            System.out.println("find匹配失败");
        }

运行结果:
find匹配到的内容:123
find开始位置:0 →→→→→→→→ 结束位置:3
find匹配到的内容:456
find开始位置:6 →→→→→→→→ 结束位置:9
find匹配到的内容:789
find开始位置:9 →→→→→→→→ 结束位置:12
find匹配失败

方法小结:
通过运行结果可以看出每次调用find()方法,匹配的初始位置都会向后移,也就是说匹配到的内容不会再匹配第二次

        String value2 = "123456789";
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(value2);
        
        if(m.find()){
            System.out.println("find匹配到的内容:" + m.group());
            System.out.println("find匹配成功");
        }else {
            System.out.println("find匹配失败");
        }

运行结果:
find匹配失败

方法小结:
find()方法即使正则书写正确,全局匹配也返回false。

Matcher类的lookingAt()使用

lookingAt()方法是从字符串的初始位置开始匹配,无论匹配多少次,无论是否匹配成功,都从初始位置开始匹配(可以全局匹配)

        String value3 = "2222AAAA33333";
        Pattern pattern1 = Pattern.compile("[1-9]\\d{3}");
        Matcher matcher1 = pattern1.matcher(value3);
        Pattern pattern2 = Pattern.compile("[1-9]\\d{4}");
        Matcher matcher2 = pattern2.matcher(value3);
        if (matcher1.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + matcher1.group());
            System.out.println("lookingAt匹配成功");
        }else {
            System.out.println("lookingAt匹配失败");
        }

        if (matcher1.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + matcher1.group());
            System.out.println("lookingAt匹配成功");
        }else {
            System.out.println("lookingAt匹配失败");
        }

        if (matcher2.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + matcher2.group());
            System.out.println("lookingAt匹配成功");
        }else {
            System.out.println("lookingAt匹配失败");
        }

运行结果:
lookingAt匹配到的内容:2222
lookingAt匹配成功
lookingAt匹配到的内容:2222
lookingAt匹配成功
lookingAt匹配失败

方法小结:
lookingAt()方法,无论匹配多少次,都只从字符串的初始位置开始匹配。
如果初始位置匹配不到,无论后面是否匹配到,都返回false

        String value2 = "123456789";
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(value2);
`       if (m.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + m.group());
            System.out.println("lookingAt匹配成功");
        }else {
            System.out.println("lookingAt匹配失败");
        }

运行结果:
lookingAt匹配到的内容:123456789
lookingAt匹配成功

方法小结:
lookingAt()方法可以全局匹配。

Matcher类的reset()使用

reset()方法是重置作用,重置此匹配器,返回一个当前匹配器。

        String value = "123AAA456789BBBC";
        Pattern pattern = Pattern.compile("[1-9]\\d{2}");
        Matcher matcher = pattern.matcher(value);

        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }else {
            System.out.println("find匹配失败");
        }

        if (matcher.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + matcher.group());
            System.out.println("lookingAt开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }

        matcher.reset();//重置此匹配器
        System.out.println("匹配器被重置");
        if (matcher.find()) {
            System.out.println("find匹配到的内容:" + matcher.group());
            System.out.println("find开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }
        if (matcher.lookingAt()) {
            System.out.println("lookingAt匹配到的内容:" + matcher.group());
            System.out.println("lookingAt开始位置:" + matcher.start() + "  →→→→→→→→  结束位置:" + matcher.end());
        }

运行结果:
find匹配到的内容:123
find开始位置:0 →→→→→→→→ 结束位置:3
find匹配到的内容:456
find开始位置:6 →→→→→→→→ 结束位置:9
find匹配到的内容:789
find开始位置:9 →→→→→→→→ 结束位置:12
find匹配失败
lookingAt匹配到的内容:123
lookingAt开始位置:0 →→→→→→→→ 结束位置:3
匹配器被重置
find匹配到的内容:123
find开始位置:0 →→→→→→→→ 结束位置:3
lookingAt匹配到的内容:123
lookingAt开始位置:0 →→→→→→→→ 结束位置:3
matches匹配到的内容:123456789

方法小结:
通过上述代码运行结果可以看出,reset()重置后,find()方法的查找又从最初位置开始匹配,而lookingAt()方法本就一直从最初位置匹配,所以结果不受影响,同理,matches()方法是全局匹配,所以应该也不会受影响。

附言

新年新气象,第一次总结技术文档,大牛勿喷,如有错误,欢迎指摘,随时更新,新人小白,共同成长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java正则匹配Matcher类的matches()、lookingAt()和find()和String类的matches()使用 的相关文章

  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • Ubuntu安装Tomcat 执行[./startup.sh]命令显示“ Permission denied “问题解决

    报错贴图 xff1a 根据错误提示 xff0c 为权限问题 然后我们检查权限情况 xff1a 方框中为管理员权限 xff0c 显示为rw r代表read xff08 读 xff09 xff0c w代表write xff08 写 xff09
  • 2021年7月1日:AndroidStudio集成opencv指南。

    版本声明 xff1a 1 AndroidStudio 4 2 1 2 opencv版本4 5 2 3 androidStudio创建项目选择项目类型Native C 43 43 4 下载opencv android版本解压后 xff0c 找
  • Redis(十) 布隆过滤器

    速记 为什么使用布隆过滤器 xff1f 1 为了省内存 xff0c 提高速率 2 因为1所以布隆过滤器不需要百分百正确 3 说存在不一定存在 xff0c 说不存在一定不存在 4 在解决缓存穿透的问题时 xff0c 拦截了大部分的请求 xff
  • Docker学习笔记(九)---DockerFile

    DockerFile 文章目录 DockerFileDockerFile介绍DockerFile构建过程基础知识 DockerFile的指令实战测试CMD 和 ENTRYPOINT 区别 Docker其他学习笔记 DockerFile介绍
  • 【使用multipart/form-data方式传递MultipartFile参数,实现服务间文件的传递】

    目录 一 代码实现二 MultipartFile工具类三 HttpClient使用四 参考链接 一 代码实现 1 A服务接收前端上传文件并发送至B服务 引入依赖 lt dependency gt lt groupId gt org apac
  • JSP中JavaBean的应用:计算三角形或者梯形的面积

    计算三角形或者梯形的面积 1 jsp页面的编写 页面部分包含一个表单 xff0c 这个表单有一个提供选择的图形的下拉列表 xff0c 三个输入框分别输入三角形的三条边或者是梯形的上底 下底和高 xff0c 一个计算的提交按钮 在页面中还应该
  • ubuntu22虚拟机设置中文(亲测有效)

    1进入 虚拟机 找到设置 2 进入设置找到区域和语言并切换为Chinese xff0c 再点击select 3 再点击管理已安装语言 xff0c 弹框再点击添加或删除语言 xff08 记得点击应用到整个系统 xff09 4 在里面找到中文语
  • JDK环境配置

    JDK环境配置 xff08 注 xff1a 安装jdk和jre的时候把两个文件夹都放在同一目录下 xff0c 如 xff1a 放在 D Program Files Java xff09 1 右键点击此电脑 xff0c 选择属性 xff0c
  • 复合语句和流程控制

    复合语句 在MariaDB 10 1 1 43 版本中 xff0c 我们可以在存储过程以外来使用复合语句了 xff0c 顾名思义 xff0c 复合语句就是将多条语句作为一个整体来执行 xff0c 可以在其中使用一些逻辑判断 xff0c 循环
  • C++函数篇之求某个范围中素数的和

    1 案例 输入两个正整数m和n xff0c 求m到n之间 xff08 包括m和n xff09 所有素数的和 要求定义并调用 函数isprime xff08 x xff09 来判断x是否为素数 2 思路 主函数编写 函数的编写 xff1a 素
  • mybatis报错Error attempting to get column ‘id‘ from result set. Cause: org.postgresql.util.PSQLExcept

    mybatis报错Error attempting to get column id from result set Cause org postgresql util PSQLException Bad value for type in
  • Caused by: java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list, reference

    在公司出现以下Bug问题 所以开始研究为什么会出这个问题 找到网上说先执行这个命令 打开mysql客户端 输入 select 64 64 global sql mode 查询出来的信息长这个样子 ONLY FULL GROUP BY STR
  • unbutu 18.04 循环登录报错

    1 报错 dev sda2 clean 问题描述 先同时按下 Ctrl 43 Alt 43 F1 xff08 F1 F6其中一个就可以 xff09 进入命令行模式 然后输入用户名 xff0c 回车 xff0c 输入密码 xff0c 回车 x
  • Rockchip Android13平台提取kernel环境编译KO

    Rockchip Android13平台提取kernel环境编译KO 当需要给第三方提供kernel的ko编译环境时 xff0c 又不想提供完整的kernel源码 xff0c 则可以对kernel进行裁剪提取出最小的编译环境和编译器提供给第
  • Ubuntu20.4系统隐藏顶栏

    注 xff1a Ubuntu20 4以上版本安装gnome tweak tool可以实现隐藏顶栏了 xff0c 但20 4还需要安装一下扩展模块 xff0c 教程如下 xff1a 在Ubuntu中有两个扩展工具都支持隐藏顶栏 1 安装aut
  • 生产者详解-启动流程

    文章目录 生产者详解生产者概述生产者高可用客户端保证Broker端保证 生产者源码解析生产者类生产者启动流程 生产者详解 生产者概述 发送消息的一方被称作生产者 RocketMQ客户端中的生产者有两个独立的实现类 xff1a org apa
  • Mybatis Plus的理解与应用

    前言 mybatis plus是一个mybatis的增强工具 xff0c 在其基础上只做增强不做改变 作为开发中常见的第三方组件 xff0c 学习并应用在项目中可以节省开发时间 xff0c 提高开发效率 官方文档地址 xff1a MyBat
  • V1-01-02 FusionComputer简介

    文章目录 一 FusionComputeFusionComputer组件的作用 虚拟化是云计算重要的组成部分 云计算接管虚拟化 xff0c 做成资源池给用户使用 FusionSphere是华为自主知识产权的云操作系统 xff0c 集虚拟化平
  • Docker 镜像概念及操作

    Docker 专栏文章索引 x1f449 Docker 简介 x1f449 Docker 安装图文教程 x1f449 Docker 镜像概念及操作 x1f449 Dockerfile 深入理解 Docker 镜像及操作 x1f7e7 1 镜
  • java正则匹配Matcher类的matches()、lookingAt()和find()和String类的matches()使用

    String类的matches 使用 matches 方法为全局匹配 xff0c 如果正则能把整个字符串匹配上则返回true xff0c 否则返回false span class token class name String span v