您的位置 首页 java

java破解一道阿里的正则难题

ali曾经有这样一道题:

java破解一道阿里的正则难题

这道题还是有点难理解的,我经过多次琢磨,才发现,其实点可以代表a,而*不可以代表a,

aaa和a.a可以匹配说明只要出现3个a,或者a和点的数量之和为3就算匹配,超过或者少于都不算匹配

理解了题就好办了。

这个题的解法也有一大堆,但我看后似乎没怎么使用到正则

下面给出我的解法

String rex=”([^a.]*[.a][^a.]*){3}”;

使用上面的正则表达式即可判断字符串是否满足条件

[^a.]* 表示排除a和. 的所有字符,*表示可以出现0或多次

[.a] 表示出现a或.

整个() 表示只出现一次a或.的字符串,

{3} 表示这样的()要出现3次

代码如下:

 public static void main(String[] args) throws ParseException {

String rex="([^a.]*[.a][^a.]*){3}";
String s="2232aa.aeerra.333a33";
Pattern p=Pattern.compile(rex); 
Matcher m=p.matcher(s); 
System.out.println("字符串:"+s+"  满足的子串:");
while(m.find()) {
System.out.println(m.group());//使用matcher找出一个串满足的子串
}

System.out.println("------测试字符串是否匹配正则------------");
System.out.println("a*a*aa".matches(rex));//FALSE
System.out.println("a*a*a".matches(rex));//TRUE
System.out.println("a.a".matches(rex));//TRUE
System.out.println("a*a".matches(rex));//FALSE

}
  

运行结果:

文章来源:智云一二三科技

文章标题:java破解一道阿里的正则难题

文章地址:https://www.zhihuclub.com/169728.shtml

关于作者: 智云科技

热门文章

网站地图