题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
import java.util.Scanner;
public class Main { private static Object Solution;
public static void main(String[] args) {
//输入
Scanner scanner=new Scanner(System.in);
String str;
int i=0;
while(scanner.hasNextLine()){
str=scanner.nextLine();
if (check(str)) System.out.println("OK");
else System.out.println("NG");
}
}
//验证密码是否合规,合规返回true,不合规返回false
private static boolean check(String str) {
//判断长度
if (str.length()<=8)return false;
//基于状态机,判断规则二是否满足
int count=0;
boolean flag=false;//标记是否满足规则二
char[] s=str.toCharArray();
outter:for (char c :
s) {
switch (count){
case -1:
flag=true;
break outter;
case 0:
if(Character.isUpperCase(c))count=1;
else if (Character.isLowerCase(c))count=2;
else if (Character.isDigit(c))count=3;
else if (!Character.isSpaceChar(c)&&c!='\n')count=4;
break;
case 1:
if (Character.isLowerCase(c))count=5;
else if (Character.isDigit(c))count=6;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=7;
break;
case 2:
if(Character.isUpperCase(c))count=5;
else if (Character.isDigit(c))count=9;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=10;
break;
case 3:
if(Character.isUpperCase(c))count=6;
else if (Character.isLowerCase(c))count=9;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=13;
break;
case 4:
if(Character.isUpperCase(c))count=7;
else if (Character.isLowerCase(c))count=10;
else if (Character.isDigit(c))count=13;
break;
case 5:
if (Character.isDigit(c))count=-1;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
break;
case 6:
if (Character.isLowerCase(c))count=-1;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
break;
case 7:
if (Character.isLowerCase(c))count=-1;
else if (Character.isDigit(c))count=-1;
break;
case 9:
if(Character.isUpperCase(c))count=-1;
else if (!Character.isSpaceChar(c)&&c!='\n'&&!Character.isLetter(c)&&!Character.isDigit(c))count=-1;
break;
case 10:
if(Character.isUpperCase(c))count=-1;
else if (Character.isDigit(c))count=-1;
break;
case 13:
if(Character.isUpperCase(c))count=-1;
else if (Character.isLowerCase(c))count=-1;
break;
default:
throw new IllegalStateException("Unexpected value: " + count);
}
}
if (!flag)return false;
//规则三
for (int i = 0; i < str.length()-2; i++) {
for (int j = i+1; j < str.length()-2; j++) {
if (str.substring(i,i+3).equals(str.substring(j,j+3))){
return false;
}
}
}
return true;
}
}