正则表达式匹配{0}

业务需求

今天刚接到了一个业务需求,这个需求包含了一个在字符串种寻找{0}这种小功能的实现。我寻思着像这种计数的java应该是有直接可以使用的方法的。立马去翻jdk文档

String的实现方式

String类中我并没有找到可以直接拿来用的方法,但是可以用其他方法实现需求:

count = 0;
str = "{0}sdjfpoajsdf{1}daspjfpsd{2}";
for(i=0;;i++)
{
    if(str.contains("{"+i+"}"))
       count++
    else
       break
}
// 大概思路是这个样子

这种循环读取的方式我感觉不是特别舒服,所以我去找正则的实现方式

正则表达式的实现方式

1
String regex = "\\{[0-9]+\\}"
String str = "{0}asfsdafds{1}asfdsafdsa{2}adsffd"
str.matches(regex)

这个返回结果为false,这东西是用来匹配整个字符串的,不是用来找字符串里面有多少个符合要求的字串的

2
String c = messageMould.getMouldContent();
// 注意特殊字符要转义符\\,找{在正则表达式中写成\\{
Pattern p = Pattern.compile("\\{[0-9]+\\}");
Matcher matcher =p.matcher("{0}asfsdafds{1}asfddsa{2}affd");
int count = 0;
while (matcher.find())
{
    count++;
}

注意这里有一个坑,我看到网上很多人使用

matcher.groupCount()

上面那条语句来寻找有多少个符合正则表达式的字串,但是我自己去尝试的时候发现这条语句根本不能找到有多少个符合正则表达式的子串
(jdk1.8)。

String c = messageMould.getMouldContent();
Pattern p = Pattern.compile("\\{[0-9]+\\}");
Matcher matcher =p.matcher("{0}asfsdafds{1}asfddsa{2}affd");
Sysout.out.print("有没有找到:"+p.find());
System.out.println("多少组:"+matcher.groupCount());

输出结果是

有没有找到:true
多少组:0

然后我修改正则

//{[0-9]+//}(z)(z)(z)(z)(z)

输出结果是

有没有找到:false
多少组:5

找不到任何匹配的,groupCount()返回了5

然后我去增加()的数量发现groudCount()也一起增加

证明了groupCount()找的其实是返回你正则里面有多少个(),一个括号称为组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值