java数据结构与算法基础-----字符串------正则表达式的练习案例---持续补充中

news2024/10/7 8:30:00
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846
正则表达式基础:https://blog.csdn.net/grd_java/article/details/136120841

文章目录

  • 一、简单的应用实例
    • 1. 验证输入的是否是汉字
    • 2. 数字相关
    • 3. 验证复杂的URL
  • 二、反向引用案例
  • 三、结巴去重案例
  • 四、算法题

一、简单的应用实例

1. 验证输入的是否是汉字

  1. 百度,或者问人工智能ChatGPT等,查询unicode对应的汉字编码,我们查到是16进制的4e00 - 9fa5. 对应到正则表达式就是\u4e00-\u9fa5
    在这里插入图片描述
  2. 我们对一个字符串进行匹配,必须满足汉字开头,汉字结尾,也就是全部都得是汉字,所以需要用到正则定位符^$来定位开头和结尾。匹配所有汉字1个或多个,使用[\u4e00-\u9fa5]+
    在这里插入图片描述
  3. 此时如果我们匹配的字符串并不全由汉字组成,就会返回false
    在这里插入图片描述

2. 数字相关

6位数,第一个数不能为0,其余5个数随便。例如123890

在这里插入图片描述

public static void main(String[] args) {
        String content = "125806";
        Pattern pattern = Pattern.compile("^[1-9]\\d{5}$");
        Matcher matcher = pattern.matcher(content);//按照pattern定义的匹配规则,到content中匹配
        if(matcher.find()) System.out.println("匹配成功");
        else System.out.println("匹配失败");
    }
qq号码:1-9开头,剩余数字随便的5-10位数,例如12389,914401258

在这里插入图片描述

  1. 关键在于使用{num1,num2}来限定数量,因为一共5-10个数,开头确定不能为0,剩余4-9个就可以用\\d{4,9}来作为匹配规则
手机号码:以13、14、15、18开头的11位数,例如13722095854

在这里插入图片描述

3. 验证复杂的URL

下面的案例并不严谨,只是练习,如果想要正在利用正则表达式解决相关问题,做字符串相关的算法题会达到专项提升的效果。类似于数据库中sql语句的运用,就是不断解决问题,提高自己的处理问题的能力。

随便找一个URL为例:https://www.bilibili.com/video/BV1j4411W7F7/?spm_id_from=333.337.search-card.all.click&vd_source=f0637064fb8570e4bb79c51a3c016b30
在这里插入图片描述

  1. 第一部分:https://或者http://。正则表达式非常简单:(?<one>http(?:s|))://,首先是命名捕获分组,名称为one,限定匹配https或者http。后面跟://
  2. 第二部分:域名,前面的部分可能由若干个:数字、字母、下划线、横线+一个点组成。最后会跟.cn或.com等等。(?<two>(?:[\\w-]+\\.)+[\\w-]+)命名捕获为two,\\w表示任意字母数字或下划线,[\\w-]表示从\\w或者-选一个。后面跟+,表示匹配若干个,然后\\.表示匹配点。然后将这部分整体用+修饰,表示匹配若干个。最后通过[\\w-]+匹配最后的.cn等内容
    在这里插入图片描述
  3. 第3部分:后面的路径和文件名。主要由/分隔,并且由数字、字母、下划线、-、?、=、&、/、%、.、组成。当然第3部分是可有可无的,例如www.baidu.com就没有第三部分。所以用?修饰,表示0个或1个第三部分。正则表达式为(?<three>(?:\/[\w-?=&/%.]*))?$
    在这里插入图片描述

各位可能有些许疑问,[.]中的点,为什么不加转义符号,因为点是特殊字符,如果我们想要原样匹配,需要加转义符号[\\.]的形式。这是因为,类似(?:pattern)和[pattern]这种,都可以不需要转义符,而直接原样匹配特殊字符

    public static void main(String[] args) {
        String content = "https://www.bilibili.com/video/BV1j4411W7F7/?spm_id_from=333.337.search-card.all.click&vd_source=f0637064fb8570e4bb79c51a3c016b30";
        Pattern pattern = Pattern.compile(
                "(?<one>http(?:s|))://"+
                        "(?<two>(?:[\\w-]+\\.)+[\\w-]+)"+
                        "(?<three>(?:\\/[\\w-?=&/%.]*))?$"
        );
        Matcher matcher = pattern.matcher(content);//按照pattern定义的匹配规则,到content中匹配
        while(matcher.find()){
            System.out.println("匹配到的URL:"+matcher.group(0));
            System.out.println("http协议为:"+matcher.group("one"));
            System.out.println("主机资源地址(ip+端口号或者域名):"+matcher.group("two"));
            System.out.println("路径和文件位置:"+matcher.group("three"));
        }
    }

二、反向引用案例

三、结巴去重案例

四、算法题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础-MySQL数据库的基本操作

①MYSQL数据库基本操作-DDL 1.DDL的解释 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;数据定义语言&#xff0c;包括以下内容&#xff1a; 对数据库的常用操作 对表结构的常用操作 修改表结构 2.对数据库的常用操作 功能SQL查看所有的数据库show d…

阿猪写作能用吗 #媒体#微信

阿猪写作是一个非常实用的论文写作工具&#xff0c;它不仅能帮助用户快速完成论文写作&#xff0c;还可以提供查重降重的功能&#xff0c;帮助用户确保论文的原创性。在当今社会&#xff0c;论文写作是学术界和科研领域最重要的工作之一&#xff0c;而阿猪写作的出现无疑是给这…

使用阿里云服务器搭建网站教程,超简单10分钟网站上线

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

JVM——运行时数据区

前言 由于JAVA程序是交由JVM执行的&#xff0c;所以我们所说的JAVA内存区域划分也是指的JVM内存区域划分&#xff0c;JAVA程序具体执行的过程如下图所示。首先Java源代码文件会被Java编译器编译为字节码文件&#xff0c;然后由JVM中的类加载器加载各个类的字节码文件&#xff0…

RabbitMQ之Plugins插件----AMQP对接MQTT

1.启用插件 rabbitmq-plugins enable rabbitmq_mqtt 2.检查是否启动成功&#xff0c;打开rabbitmq后台 3.概念&#xff1a; AMQP是由交换器和queue队列组成的消息队列机制&#xff0c;MQTT是由订阅主题组成的消息机制 1.MQTT创建连接时会向rabbitmq创建一个自己的queue&…

信号处理之快速傅里叶变换(FFT)

信号处理之快速傅里叶变换FFT 历史溯源欧拉公式傅里叶级数(FS)傅里叶变换(FT)离散傅里叶级数(DFS)离散时间傅里叶变换(DTFT)离散傅里叶变换(DFT)快速傅里叶变换(FFT)MATLAB中常用的FFT工具FFT中常见的问题 历史溯源 相信很多人知道傅里叶变换&#xff0c;但是很多人对傅里叶变…

【Monero】Onion Monero Blockchain Explorer | 洋葱门罗币区块链浏览器

github&#xff1a;onion-monero-blockchain-explorer Onion Monero Blockchain Explorer特点: 没有cookie&#xff0c;没有网络分析跟踪器&#xff0c;没有image&#xff0c; 开源&#xff0c; 完全用C编写&#xff0c; 显示加密的付款 ID&#xff0c; 显示环签名&#xff0c;…

C# WPF编程-控件

C# WPF编程-控件 概述WPF控件类别包括以下控件&#xff1a;背景画刷和前景画刷字体文本装饰和排版字体继承字体替换字体嵌入文本格式化模式鼠标光标 内容控件Label&#xff08;标签&#xff09;Button&#xff08;按钮&#xff09; 概述 在WPF领域&#xff0c;控件通常被描述为…

阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_tokenHMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY 导读&#xff1a;本文总结了熟悉系统主要分三部分&#xff1a;业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题&#xff0c;这些问题…

一笔画--PTA

文章目录 题目描述思路AC代码 题目描述 输入样例1 3 2 1 2 2 3 输出样例1 Y输入样例2 4 3 1 2 1 3 1 4 输出样例2 N输入样例3 1 0 输出样例3 Y思路 dfs 、欧拉通路、欧拉回路的判定 前导知识 欧拉通路、欧拉回路、欧拉图 无向图&#xff1a; ①设G是连通无向图&#xff0c;则称…

在使用 Java 数据采集时,有哪些需要注意的问题?

近年来&#xff0c;随着网络数据的爆发式增长&#xff0c;爬虫技术在信息收集和数据分析领域发挥着重要作用。而Java作为一种强大的编程语言&#xff0c;其爬虫库和框架也日益受到开发者的青睐。然而&#xff0c;使用Java爬虫也存在一些需要注意的问题。 首先&#xff0c;是合…

【排序算法】实现快速排序值(霍尔法三指针法挖坑法优化随即选key中位数法小区间法非递归版本)

文章目录 &#x1f4dd;快速排序&#x1f320;霍尔法&#x1f309;三指针法&#x1f320;挖坑法✏️优化快速排序 &#x1f320;随机选key&#x1f309;三位数取中 &#x1f320;小区间选择走插入&#xff0c;可以减少90%左右的递归&#x1f309; 快速排序改非递归版本&#x1…

2024阿里云2核2G服务器租用价格99元和61元一年

阿里云2核2G服务器配置优惠价格61元一年和99元一年&#xff0c;61元是轻量应用服务器2核2G3M带宽、50G高效云盘&#xff1b;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large&#xff0c;2核2G、3M固定带宽、40G ESSD entry系统盘&#xff0c;阿里云活动链接 aliyunfuwuqi.…

STM32 | Systick定时器(第四天)

STM32 第四天 一、Systick定时器 1、定时器概念 定时器:是芯片内部用于计数从而得到时长的一种外设。 定时器定时长短与什么有关???(定时器定时长短与频率及计数大小有关) 定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ 定时器定时时间:计数个数…

Github 2024-03-23 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…

使用Intellij idea编写Spark应用程序(Scala+SBT)

使用Intellij idea编写Spark应用程序(ScalaSBT) 对Scala代码进行打包编译时&#xff0c;可以采用Maven&#xff0c;也可以采用SBT&#xff0c;相对而言&#xff0c;业界更多使用SBT。 运行环境 Ubuntu 16.04 Spark 2.1.0 Intellij Idea (Version 2017.1) 安装Scala插件 安…

SpringBoot源码探险 —— SpringBoot启动流程详解

一&#xff0c;SpringBoot启动流程 本人使用的SpringBootParent版本为 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.1</version><relativePath/>…

STM32之HAL开发——RCC外设CubeMX配置时钟

RCC外设介绍 RCC是Reset and Clock Control (复位和时钟控制)的缩写&#xff0c;它是STM32内部的一个重要外设&#xff0c;负责管理各种时钟源和时钟分频&#xff0c;以及为各个外设提供时钟使能。RCC模块可以通过寄存器操作或者库函数来配置。 RCC是复位和时钟控制模块&#…

强化学习之父Richard Sutton:通往AGI的另一种可能

2019年&#xff0c;强化学习之父、阿尔伯塔大学教授Richard Sutton发表了后来被AI领域奉为经典的The Bitter lesson&#xff0c;这也是OpenAI研究员的必读文章。 在这篇文章中&#xff0c;Richard指出&#xff0c;过去 70 年来&#xff0c;AI 研究的一大教训是过于重视人类既有…

是德科技keysight DSOX3024T示波器

181/2461/8938产品概述&#xff1a; DSOX3024T 示波器 要特性与技术指标 使用电容触摸屏进行简洁的触控操作&#xff1a; •提高调试效率 •触控设计可以简化文档记录 •使用起来就像您喜欢的智能手机或平板电脑一样简单 使用 MegaZoom IV 技术揭示偶发异常&#xff1a; •超快…