题解 | #密码强度等级#
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String s = in.nextLine();
char[] arr = s.toCharArray();
int grade = 0;
boolean char1Flag = false;
boolean char2Flag = false;
boolean numFlag = true;
boolean scharFlag = true;
//1. 长度
if (s.length() <= 4) {
grade += 5;
} else if (s.length() >= 8) {
grade += 25;
} else {
grade += 10;
}
// System.out.println(grade);
//2. 字母
if (s.matches(".*[a-z].*") && s.matches(".*[A-Z].*")) {
grade += 20;
char1Flag = true;
} else if (s.matches(".*[a-z].*") || s.matches(".*[A-Z].*")) {
grade += 10;
char2Flag = true;
}
// System.out.println(grade);
//3.数字
if (s.matches(".*[0-9]{1,}.*[0-9]{1,}.*")) {
grade += 20;
} else if (s.matches(".*[0-9].*")) {
grade += 10;
} else {
numFlag = false;
}
// System.out.println(grade);
//4. 符号
// !"#$%&'()*+,-./ (ASCII码:0x21~0x2F) 33~47
// :;
// <= > ? @ (ASCII码:0x3A~0x40) 58 ~ 64
// [\] ^ _` (ASCII码:0x5B~0x60) 91~96
//{|}~ (ASCII码:0x7B~0x7E) 123~126
int count = 0;
for(int i = 0; i < arr.length; i++){
int temp = arr[i];
if(temp >= 33 && temp <= 47
||temp >= 58 && temp <= 64
||temp >= 91 && temp <= 96
||temp >= 123 && temp <= 126 ){
count++;
if(count == 2){
break;
}
}
}
if(count == 2){
grade += 25;
}else if(count == 1){
grade += 10;
}else{
scharFlag = false;
}
// System.out.println(grade);
//5.
if(char1Flag && numFlag && scharFlag){
grade += 5;
}else if(char2Flag && numFlag && scharFlag){
grade += 3;
}else if(char2Flag && numFlag){
grade += 2;
}
// System.out.println(grade);
//这个结果集也可以使用map匹配
if (grade >= 90) {
System.out.println("VERY_SECURE");
} else if (grade >= 80) {
System.out.println("SECURE");
} else if (grade >= 70) {
System.out.println("VERY_STRONG");
} else if (grade >= 60) {
System.out.println("STRONG");
} else if (grade >= 50) {
System.out.println("AVERAGE");
} else if (grade >= 25) {
System.out.println("WEAK");
} else if (grade >= 0) {
System.out.println("VERY_WEAK");
}
}
}
}

查看17道真题和解析