(?:((0[1-9]\s)|([1|2]\d\s)|(3[0-6]\s))(?!.*\1)){6}\+\s((0[1-9])|(1[0-6]))
01 02 03 04 22 28 + 01 前6个不重复
while((s = in.readLine())!=null){
String[] temp = s.split(" ");
if(temp.length != 8 || !temp[6].equals("+")) {
System.out.println(s);
continue;
}
for(int i=0;i<temp.length;i++){
if(i == 6){
continue;
}
int number = Integer.parseInt(temp[i]);
if(i==7 && (number<1||number>16)){
System.out.println(s);
continue;
}
if(i==7) continue;
if(number<1||number>36){
System.out.println(s);
continue;
}
}
if(temp[0].equals(temp[1])||
temp[0].equals(temp[2])||
temp[0].equals(temp[3])||
temp[0].equals(temp[4])||
temp[0].equals(temp[5])||
temp[1].equals(temp[2])||
temp[1].equals(temp[3])||
temp[1].equals(temp[4])||
temp[1].equals(temp[5])||
temp[2].equals(temp[3])||
temp[2].equals(temp[4])||
temp[2].equals(temp[5])||
temp[3].equals(temp[4])||
temp[3].equals(temp[5])||
temp[4].equals(temp[5])){
System.out.println(s);
continue;
}
result ++;
}
JAVA数据来验证,110W数据大约花费4秒左右
while((s = in.readLine())!=null){
if (!s.matches("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))")) {
System.out.println(s);
}
result ++;
}
正则表达式来验证,110W数据竟然花费了14S左右
Pattern pattern = Pattern.compile("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))");
while((s = in.readLine())!=null){
// if (!s.matches("(?:((0[1-9]\\s)|([1|2]\\d\\s)|(3[0-6]\\s))(?!.*\\1)){6}\\+\\s((0[1-9])|(1[0-6]))")) {
// System.out.println(s);
// }
if(!pattern.matcher(s).matches()){
System.out.println(s);
}
result ++;
}
用这种方式的正则表达式来验证,110W数据大约花费了8S左右
所以如果使用正则,建议采用第二种正则表达式的方式,当然与JAVA相比还是慢,慢有可能出现在1.正则可能有更优化的方式 2.通配符的使用,匹配的次数比较多