Java正则表达式的十大问题

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

伙伴们注意了!

小编在这里给大家送上关注福利:

转发本文,关注“速学Java”公众号即可领取小编精心准备的资料一份!

本文总结了有关Java正则表达式的常见问题。
由于它们是最常用的,你可能会发现它们也非常有用。
ns表示Java正则表达式

1. 如何从字符串中提取数字?

使用正则表达式的一个常见问题是将所有数字提取到整数数组中。

在Java中,\d表示数字范围(0-9)。
尽可能使用预定义的类将使您的代码更易于阅读,并消除由畸形字符类引入的错误。
有关详细信息,请参阅预定义的字符类。
请注意\d中的第一个反斜杠。
如果在字符串文字中使用转义结构,则必须在反斜杠前面加上另一个反斜杠,以便编译字符串。
这就是为什么我们需要用\\d。

2. 如何用换行符拆分Java字符串? 

根据所使用的操作系统,至少有三种不同的方式可以输入新行字符。

因此,按新行分割字符串最直接的方法是

但是如果你不想要空行,你可以使用,这也是我最喜欢的方法:

下面是一种更健壮的方法,它实际上是独立于系统的。
但是请记住,如果两个换行符并排放置,仍然会得到空行。

3.Pattern.compile ()的重要性

指定为字符串的正则表达式必须首先编译为Pattern类的实例。
编译()方法是创建对象实例的唯一方法。
典型的调用序列是这样的

本质上,Pattern.compile()用于将正则表达式转换为有限状态机(参见编译器:原理、技术和工具(第二版))。
但是执行匹配所涉及的所有状态都驻留在匹配器中。
通过这种方式,可以重用模式p。
许多牌手可以共享相同的模式。

matches()方法被定义为仅在使用正则表达式一次时使用的一种便利方法。
该方法仍然使用compile()隐式地获取模式的实例,并匹配字符串。
因此,它等价于上面的第一个代码,尽管对于重复匹配,它的效率较低,因为它不允许重用已编译的模式。

4. 如何转义文本为正则表达式?

通常,正则表达式使用“\”来转义结构,但是在反斜杠前面加上另一个要编译的Java字符串是很痛苦的。
用户还可以通过另一种方式将字符串文本传递给模式,比如“$5”。
不用写\\$5或[$]5,我们可以打字

5. 为什么String.split()需要转义管道分隔符?

split()在给定正则表达式的匹配项周围拆分字符串。
Java表达式支持影响模式匹配方式的特殊字符,这称为元字符。
|是一个元字符,用于从多个可能的正则表达式中匹配单个正则表达式。
例如,|b的意思是A或B。有关详细信息,请参阅与竖条或管道符号的交替。
因此,要使用|作为文字,您需要通过在它前面添加\\|来转义它。

6. 如何将anbn与Java正则表达式匹配?

这是所有非空字符串的语言,这些字符串由一定数量的a后跟相同数量的b组成,如ab、aabb和aaabbb。
这种语言可以显示上下文无关文法年代→aSb | ab,因此一种非正式语言。

然而,Java regex实现可以识别的不仅仅是常规语言。
也就是说,根据形式语言理论的定义,它们不是“规则的”。
使用前瞻性和自引用匹配就可以实现。
在这里,我将首先给出最后的正则表达式,然后稍微解释一下。
全面的解释,我会参考您阅读我们如何匹配^ n b ^ n与Java正则表达式。

 

与其解释这个复杂正则表达式的语法,我更愿意介绍一下它是如何工作的。

在第一次迭代中,它在第一个a处停止,然后向前看(通过使用a*跳过了一些)是否有一个b。这是通过使用(?:a(?)
= *(\ \ 1 ? + b)))。
如果它匹配,\1,自引用匹配,将匹配非常内圆括号元素,这是第一次迭代中的单个b。
在第二次迭代中,表达式将在第二次a处停止,然后它向前看(再次跳过as),看看是否会有b。但这一次,\\1+b实际上等于bb,因此必须匹配两个b。
如果是,\1将在第二次迭代后更改为bb。
在第n次迭代中,表达式停在第n个a处,看看前面是否有n个bs。

通过这种方式,表达式可以计算a的数量,如果b后面跟着a的数量相同,则进行匹配。

7. 如何将字符串中的两个或多个空格替换为单个空格并仅删除前导空格?

replaceall()用给定的替换替换与给定正则表达式匹配的每个子字符串。
“2个或多个空格”可以用正则表达式[]+表示。
因此,下面的代码可以工作。
请注意,该解决方案最终不会删除所有前导和尾随的空白。
如果希望删除它们,可以在管道中使用String.trim()。

 8. 如何使用正则表达式确定一个数字是否是素数?

该函数首先生成n个字符,并尝试查看该字符串是否匹配。?|(..+?)\\1+。
如果是素数,表达式将返回false和!
会反转结果。

第一部分。
确保1不是引物。
魔术部分是使用反向引用的第二部分。
(..+?)\\1+先尝试匹配n个字符长度,然后用\\1+重复几次。

根据定义,素数是大于1的自然数,除1和它自身外没有正因子。
这意味着如果a=n*m那么a不是素数。
n*m可以进一步解释为“重复n m次”,这正是正则表达式所做的:使用(..+?)匹配n个字符长度,然后使用\\1+重复m次。
因此,如果模式匹配,则数字不是素数,否则就是素数。
提醒!
会反转结果。

9. 如何分割逗号分隔的字符串,但忽略引号中的逗号?

您已经到了正则表达式崩溃的地步。
编写一个简单的拆分器更好,也更整洁,可以按照您的意愿处理特殊情况。

另外,您可以使用switch语句或if-else来模拟有限状态机的操作。
附件是一段代码。

 10. 如何在Java正则表达式中使用反向引用

反向引用是Java正则表达式中的另一个有用特性。

 

最后,想学习Java的小伙伴们!

关注速学java公众号就可以拿到一份我为大家准备的Java学习资料!

对Java感兴趣的小伙伴也可以加 小编V❤: suxuejava

c语言串口编程详解 串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。 阅读详情

相关推荐

KNX实战—ETS5_智能开关从零到一的配置全流程

本文详细介绍了使用ETS5软件配置KNX智能开关的完整流程。从创建项目、构建建筑结构,到导入产品数据库、添加并配置开关模块与智能面板,再到设置延时开关、闪烁报警等进阶功能,并深入解析了群组地址的配置与链接方法。最后指导完成项目校验与程序下载,帮助用户实现从零到一的智能灯光基础控制功能配置。

joy55的博客 517

java 如何字符串中提取数字,这个方法真的很

使用Java中的Character类中的isDigit()方法来判断当前字符是否为数字,并在字符串中进行遍历。可以使用正则表达式"\d+"来匹配字符串中的数字,并使用Matcher和Pattern类实现。Java提取字符串中的数字,可以使用正则表达式或非正则表达式的方法。运行上述代码,即可从字符串中提取数字并输出。2.非正则表达式方法。

wei7a7a7a的博客 7811

5种超实用方法:快速获取Windows文件夹下所有文件名(含CMD/PowerShell脚本)

本文详细介绍了5种快速获取Windows文件夹下所有文件名的实用方法,包括图形界面操作、Excel数据导入、CMD命令和PowerShell脚本。特别提供了高效的CMD和PowerShell脚本示例,帮助用户轻松实现文件名的批量获取与管理,大幅提升工作效率。

opencv7vision的博客 413

正则表达式的汇总和几个常见问题的解答

很多太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是很符合要求。所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下。给自己留个底,也给朋友们做个参考。 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$

TestGreeting的博客 742

Java 正则表达式(深度长文)

Java正则表达式(深度长文)

senxu_的博客 7万+

JAVA 一个或多个空格分割字符串

知识补充 String的split方法支持正则表达式正则表达式s表示匹配任何空白字符,+表示匹配一次或多次。 有了以上补充知识,下面的内容就很好理解了。 一、待分割字符串 待分割字符串为如下: String str = "a b c d e f g" 其中,字符串中的的空白分别为:单个空格,多个空格,tab制表符。 二、使用一个或多个空格分割字符串 正确代码如下: String [] arr = str.split("\s+"); for(String ss : ar

m0_67392182的博客 8075

java按空格分字符串,两种用空格分隔的java字符串的方式

两种用空格分隔的java字符串的方式两种方式:1. String str = "123 456 789 111";String [] strArray = str.split("s");2.String str = "123 456 789 111";String [] strArray = str.split(" ");3.多个空格,管有多少空格就分隔String str = "123 456...

weixin_39804631的博客 1万+

Java正则表达式中的十大问题

1.如何从一个字符串中提取数字? 使用正则表达式的一个常见问题提取所有的数字到整数的数组。 在Java中,\ d代表的一系列数字(0-9)。使用预定义的类只要有可能会使你的代码更易于阅读和消除畸形字符类引入的错误。详情请参阅预定义字符类的更多细节。请注意,第一个反斜杠\的\ D。如果你是一个字符串中使用转义构造,你必须先反斜杠用另一个反斜杠的编译字符串。这就是为什么我们需要使用\\

sunling_sz的专栏 1388

8分钟看完,彻底掌握Java正则表达式十大问题

这篇文章总结了有关Java正则表达式的主要问题。希望可以给同学们带来java学习路上的成长! 1.如何从字符串中提取数字? 使用正则表达式的一个常见问题是将所有数字提取到整数数组中。 在Java中,\d表示数字范围(0-9)。尽可能使用预定义的类将使您的代码更易于阅读,并消除了格式错误的字符类所引起的错误。请参阅预定义字符类以获取更多详细信息。请注意,第一个反斜杠\在\d。如果在字符串文字中使用转...

阿志同学 382

Java正则表达式中的常见问题

转自   Java正则表达式中的常见问题 这篇文章总结了问关于Java正则表达式的热门问题。因为它们是最常见的,你会发现,他们也非常有用。 1,如何从一个字符串中提取数字?  使用正则表达式的一个常见问题提取所有的数字到整数的数组。 在Java中,\ D是指一系列的数字(0-9)。使用预定义的类只要有可能会使你的代码更易于阅读和消除畸形字

xiao88xin的专栏 1338

Java正则表达式常见问题

IT江湖 2014年04月14日 于 IT江湖 发表 Java正则表达式中的常见问题 这篇文章总结了问关于Java正则表达式的热门问题。因为它们是最常见的,你会发现,他们也非常有用。 1,如何从一个字符串中提取数字?  使用正则表达式的一个常见问题提取所有的数字到整数的数组。 在Java中,\ D是指一系列的数字(0-9)。使用预定义的类只要有可能会使你

天之蓝的学习博客 891

JAVA中经常被问到的正则表达式问题

   本文总结JAVA中经常被问到的正则表达式问题,正因为经常被问到,你将发现他们也非常实用。1:如何从字符串中提取数字 一个常见的问题是如果使用正则表达式,把字符串中的数字提取到数组中。 在JAVA中, \d表示(0-9)范围的数字.尽量使用正则表达式可以使代码更易阅读,同时减少错误.预定义字符可参考:https://docs.oracle.com/javase/tutorial/essenti...

long316的专栏 332

Java中关于String类型的10个问题

      Java中关于String类型的10个问题 1 如何比较两个字符串用还是equals2 为什么安全敏感的字符串信息用char会比String对象更好3 字符串对象能否用在switch表达式中4 如何将字符串转换为整型数值5 如何用空格去分隔字符串6 substring方法具体是都干了些啥7 StringStringBuilderStri

java_2017_csdn的博客 200

Java字符串的十大问题

以下是有关Java字符串的十大常见问题 。 1.如何比较字符串? 使用“ ==”还是使用equals()? 简而言之,“ ==”测试引用是否相等,而equals()测试值是否相等。 除非您要检查两个字符串是否是同一对象,否则应始终使用equals()。 如果您了解字符串实习的概念会更好。 2.为什么对于安全敏感信息,char []优于String? 字符串是可变的 ,这...

最佳 Java 编程 239

十大常见Java String问题

本文介绍Java中关于String最常见的10个问题:1. 字符串比较,使用 "==" 还是 equals() ? 简单来说, "==" 判断两个引用的是是同一个内存地址(同一个物理对象). 而 equals 判断两个字符串的值是否相等. 除非你想判断两个string引用是否同一个对象,否则应该总是使用 equals()方法. 如果你了解 字符串的驻留 ( String Interning ) ...

疯狂的蜗牛 328

提高Java水平的十大技术

 提高Java水平的十大技术        本文列出了当今计算机软件开发和应用领域最重要十种关键技术排名,如果你想保证你现在以及未来的几年失业,那么你最好跟上这些技术的发展。虽然你必对这十种技术样样精通,但至少应该对它们非常熟悉。   一、XML  在十种技术中,最重要的一种技术我想应该非XML莫属。这里仅仅指XML规范本身,还包括一系列有关的基于XML的语言:主要有

Rambo的博客 652

盘点最受欢迎的十大技术文章

前面写了一篇 盘点三年来写过的原创文章,分享了三年来的原创文章。在这些原创文章中,技术文章占了一大半。今天我们就来盘点一下「最受欢迎的十大技术文章」!文章质量最高要按照文章质量排名,那么就...

陈树义 1106
上一篇: Java开发人员常犯的十大错误
下一篇: springMVC框架的参数绑定之数据类型转换
suxue_java
博客等级 码龄8年 6粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值