题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
因为有点不太理解第三个条件... 看了下题解这位大神说的就理解了:
import java.util.*;
import java.util.regex.Pattern;
/*
* 密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行)
* */
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
if (length(str) && match(str) && isRepeat(str, 0, 3)) {
System.out.println("OK");
} else
System.out.println("NG");
}
}
//1.长度超过8位
private static boolean length(String str){
if(str.length() <= 8){
return false;
}else
return true;
}
// 2.包括大小写字母.数字.其它符号,以上四种至少三种
private static boolean match(String str) {
int num = 0;
Pattern compile1 = Pattern.compile("[A-Z]");
if (compile1.matcher(str).find()) {
num++;
}
Pattern compile2 = Pattern.compile("[a-z]");
if (compile2.matcher(str).find()) {
num++;
}
Pattern compile3 = Pattern.compile("[0-9]");
if (compile3.matcher(str).find()) {
num++;
}
Pattern compile4 = Pattern.compile("[^A-Za-z0-9]");
if (compile4.matcher(str).find()) {
num++;
}
if (num >= 3) {
return true;
} else
return false;
}
// 3.不能有长度大于2的不含公共元素的子串重复 (注:其他符号不含空格或换行)
private static boolean isRepeat(String str,int sta,int end) {
if(end >= str.length()){
return true;
}
if (str.substring(end).contains(str.substring(sta, end))) {
return false;
}else
return isRepeat(str,sta + 1,end + 1);
}
}