import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String password = in.nextLine();
boolean hasUpper = false;
boolean hasLower = false;
int digitCount = 0;
int symbolCount = 0;
for (char c : password.toCharArray()) {
if (c >= 'a' && c <= 'z') {
hasLower = true;
} else if (c >= 'A' && c <= 'Z') {
hasUpper = true;
} else if (Character.isDigit(c)) {
digitCount++;
} else {
int code = (int) c;
if ((code >= 0x21 && code <= 0x2F)
|| (code >= 0x3A && code <= 0x40)
|| (code >= 0x5B && code <= 0x60)
|| (code >= 0x7B && code <= 0x7E)) {
symbolCount++;
}
}
}
int lengthScore = password.length() <= 4 ? 5 : (password.length() <= 7 ? 10 :
25);
int letterScore = 0;
boolean hasLetter = hasUpper || hasLower;
if (hasLetter) {
letterScore = (hasUpper && hasLower) ? 20 : 10;
}
int digitScore = digitCount == 0 ? 0 : (digitCount == 1 ? 10 : 20);
int symbolScore = symbolCount == 0 ? 0 : (symbolCount == 1 ? 10 : 25);
int bonus = 0;
if (hasUpper && hasLower && digitCount >= 1 && symbolCount >= 1) {
bonus = 5;
} else if (hasLetter && digitCount >= 1 && symbolCount >= 1) {
bonus = 3;
} else if (hasLetter && digitCount >= 1) {
bonus = 2;
}
int total = lengthScore + letterScore + digitScore + symbolScore + bonus;
String level;
if (total >= 90) {
level = "VERY_SECURE";
} else if (total >= 80) {
level = "SECURE";
} else if (total >= 70) {
level = "VERY_STRONG";
} else if (total >= 60) {
level = "STRONG";
} else if (total >= 50) {
level = "AVERAGE";
} else if (total >= 25) {
level = "WEAK";
} else {
level = "VERY_WEAK";
}
System.out.println(level);
}
}
https://www.nowcoder.com/discuss/727521113110073344
思路:
- 输入处理:使用 Scanner 读取输入的密码字符串。
- 变量初始化:初始化变量来跟踪密码中的大写字母、小写字母、数字和符号的数量。
- 遍历字符:遍历密码中的每个字符,并根据字符类型更新相应的变量。
- 计算各部分得分:根据规则分别计算长度、字母、数字、符号的得分。
- 计算奖励得分:根据密码中是否包含大小写字母、数字和符号的组合来计算奖励得分。
- 总分和等级判定:将各部分得分相加,根据总分确定密码的安全等级并输出结果。



京公网安备 11010502036488号