JavaSE学习笔记21:Java正则表达式

Java从入门到架构师__JavaSE Java语言基础 阅读详情

Java正则表达式

 

1、正则表达式(特点)

正则表达式,顾名思义,就是符合一定规则的表达式。作用是专门用于操作字符串,虽说String类中已经有了很多操作字符串的方法,但是它们的功能单一,操作起来还麻烦,正则弥补了它们的补足。

 

下面我们通过一个小例子来感受一下区别:

需求:对QQ号码进行校验,要求:5~15位,0不能开头,只能是数字。

(1)常规的做法:

class CheckQQ

{

public static void main(String[] args)

{

String qq="3891289y49";

checkQQ(qq);

}

 

//常规的做法:

public static void checkQQ(String str)

{

String qq=str;

if(str.length()>=5&&str.length()<=15)

{

if(!str.startsWith("0"))

{

char[] chs=str.toCharArray();

boolean flag=true;

for(int x=0;x<chs.length;x++)

{

if(!(chs[x]>='0'&&chs[x]<='9'))

{

flag=false;

break;

}

}

if(flag==true)

System.out.println("qq:"+qq);

else

System.out.println("出现非法字符!");

}

else

{

System.out.println("不可以0开头!");

}

}

else

{

System.out.println("长度错误!");

}

}

}

我们可以优化一下:

/*

char[] chs=str.toCharArray();

boolean flag=true;

for(int x=0;x<chs.length;x++)

{

if(!(chs[x]>='0'&&chs[x]<='9'))

{

flag=false;

break;

}

}

if(flag==true)

System.out.println("qq:"+qq);

else

System.out.println("出现非法字符!");

*/

回忆之前我们学过的Integer.parseInt(String str);

如果str=“12a”,那么Integer.parseInt(String str)就会抛出异常:NumberFormatException·。

因此我们可以将这个方法用在此处。

 

将上面一大片代码改成:

try

{

long l=Long.parseLong(qq);

System.out.println("qq:"+qq);

}

catch(Exception e)

{

System.out.println("出现非法字符!");

}

 

但是,尽管我们这么优化,代码还是很复杂。因此我们只得另辟蹊径。

(2)用正则表达式来做:

通过查找API文档,我们发现String类中一个方法,之前我们没讲的:

boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。用规则匹配整个字符串,只要有一处不符合规则,匹配结果就返回-1。

什么意思呢,就是说字符串是否符合给定的规则。这个规则通过一个字符串来定义,因此称之为正则表达式。正则表达式通常用regex来表示,它也是一个字符串。

import java.util.regex.*;

class CheckQQ

{

public static void main(String[] args)

{

String qq="3891289y49";

checkQQ(qq);

}

//用正则表达式:

public static void checkQQ(String str)

{

String qq=str;

String regex="[1-9][0-9]{4,14}";

 

boolean flag=qq.matches(regex);

if(flag)

System.out.println("qq:"+qq);

System.out.println("出现非法字符");

}

}

解释:

"[1-9][0-9]{4,14}"

[1-9]:表示字符串的第一位必须是1到9范围内的一个数字。

[0-9]:表示字符串的第二位必须是0到9范围内的一个数字。

{4,14}:表示想第二位这样的数据可以出现4,5,6,7,8,9,10,11,12,13,14次,包括第二位这一次出现在内。

"[1-9][0-9]{4,14}"从左往右看,还是从右往左看都可以。

 

这些符号都封装在java.util.regex包中的Pattern类中,因此要导包。

 

可以明显的看到,代码少了很多,这就是正则表达式的威力之处。可以看出,正则表达式就是用一些特定的符号来表示一些代码操作,这样就简化了书写。所以学习正则表达式就是在学习一些特殊符号的使用。

 

javase-15、正则表达式 正则表达式,其中普通字符包括大小写字母和数字。 阅读详情

相关推荐

JavaSe系列二十七: Java正则表达式

1.一个正则表达式, 就使用某种模式去匹配字符串的一个公式. 很多人认为它们看上去比较古怪而且复杂所以不敢去使用. 不过, 经过练习后, 就觉得这些复杂的表达式写起来还是相当简单的, 而且, 一旦你弄懂它们, 你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成.2.这里特别强调, 正则表达式不是只有java才有, 实际上很多编程语言都支持正则表达式进行字符串操作!如果要想灵活地运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:1.限定符2.选择匹配符。

你好, 我在学java的博客 964

1104全部报表版本号-银监会报表

G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》

数字化老司机 6289

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5721

ARM架构下Horizon Client安装全攻略:从依赖检查到环境变量配置

本文详细介绍了在ARM架构设备上安装VMware Horizon Client的全过程,包括依赖检查、软件包获取、系统部署和环境变量配置。特别针对华为鲲鹏等ARM平台,提供了从基础准备到性能优化的完整指南,帮助用户高效完成虚拟桌面客户端的部署与调优。

github5actions的博客 551

AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操

本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。

m0_67958922的博客 3083

【YOLOv8科研级创新】集成HS-FPN特征融合网络,让Neck模块在参数量锐减100W的同时精度跃升

打开确保模型解析器能识别HS_FPN模块。通过将HS-FPN集成到YOLOv8中,我们实现了一个“轻量级多尺度特征融合+精准检测”的目标检测模型。这个改进不仅在工程上能提升多尺度、细粒度场景的检测效果并降低部署成本,更在科研上提供了“选择性轻量级特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

m0_64661770的博客 137

【推荐100个unity插件之34】在unity中实现和Live2D虚拟人物的交互——Cubism SDK for Unity

Live2D是一款2D建模的软件,常用于游戏,动态壁纸,虚拟主播,游戏公司里面是有专门的ive2D岗位的。游戏里面还有一个经常使用的软件——spine,他做的也是2d的模型,但是他更适合做一些动作,Live2D更适合人物交互方面。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4992

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 386

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: JavaSE学习笔记_20:Java网络编程
下一篇: 开启web前端之旅
java_程序媛
博客等级 码龄11年 26粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值