在JAVA中,用正则表达式 匹配指定数字次数的代码怎么写呢,求助!求助

例如:“12112” “1211” “142” “1411” “133” “1321” “133” “1312” “13312” “1362” “1332”筛选出1, 2,4 出现的次数为1次、3 出现的次数为2次,即筛选出的数字是:1211,142,133, “1332”
请问这个正则表达式怎么写,我想了好久,也写不出来,大家帮帮下,谢谢,或者提示下也可以的,非常感谢你们
筛选出来的数字全都是String 类型的 "1211"这个数字也是个不合法数字, 谢谢 imkow 的提示

涉及(统计数量)这类有语义的就不该用正则了。
直接逐个字符过滤反而更快。
按规则:
1、2、4各最多出现1次或不出现;
3最多出现2次以下或不出现;
其他符号非法;

设c计数
public class Test {
static public boolean validate(String t){
int c[]=new int[4];
for(char ch:t.toCharArray()){
switch(ch){
case '1':case '2':case '3':case '4':
c[ch-'1']++;
if(c[0]>1 || c[1]>1 || c[3]>1 || c[2]>2 ) return false;
break;
default:
return false;
}
}
return c[0]<=1 && c[1]<=1 && c[2]<=2 && c[3]<=1;
}
static public void main(String argv[]){
String a[]={ "12112","1211","142","1411","133","1321",
"133","1312", "13312", "1362", "1332" };
for(String t:a)
if(validate(t)) System.out.println(t);
}
}
========
142
133
133
1332
========
另你例中有1211,出现有3个1所以不合法。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答