java String.matches方法为何不常出现

Java编程中,尽管String类提供了matches方法进行正则匹配,但实践中更常见的是使用Pattern和Matcher。原因是Pattern的预编译能提升性能,避免每次匹配都创建新实例。Matcher的matches方法要求整个输入序列匹配,而lookingAt则仅需从开头匹配。了解这些差异有助于优化代码和理解正则表达式在Java中的运用。
摘要由CSDN通过智能技术生成
java中 String.matches方法为何不常出现

在学习中经常看到正则表达式的匹配都用Pattern实现,使用正则表达式需要引入 java.util.regex 包,并用到三个类:Pattern 类、Matcher 类和异常类PatternSyntaxException。例如:

	boolean flag1 = input.matches(regex);
	
	boolean flag2 = Pattern.matches(regex, input);
	
	Pattern p = Pattern.compile(regex);
	Matcher m = p.matcher(input);
	boolean flag3 = m.matches();

从实现效果上来讲,三种匹配方法应该是等价的,但当观察别人写的博客代码时,大家往往不用字符串自带的matches方法,这就比较疑惑。

查找资料后得出的原因是:使用Pattern是为了更好的性能。
参考https://www.cnblogs.com/lccsblog/p/10988928.html
String内部为正则表达式创建了一个Pattern实例,却只用一次, 本质上来说,上示代码flag1和flag3的matches方法都是Mather的matches方法。
创建Pattern的花销很高,所以为了性能和可复用性,将Pattern在匹配前先行创建是编程好习惯。

关于上示代码的另外一些小知识点:
1.Matcher对象的matches方法是对整个序列的匹配,“fooo”.matches(“foo”);的结果是false,因为少一个o,整序列不匹配。
而Matcher对象的lookingAt方法则可以开头匹配,“fooo”.lookingAt(“foo”);的结果是true,只要开头匹配就行。

2.java中正则表达式的使用语法:特殊的转义符 \ 。在其他语言中,比如c语言,“\“就表示插入一个\符号;但java正则表达式里表示一个\符号却需要”\\”。因为java中\ 表示"插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义"。所以这也就是为什么java表示一位数字的正则表达式是 \d,而我们学习普通正则表达式的时候却只用\d表示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值