题解 | #密码强度等级#注意边界
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
import java.util.*; // String.contains()方法不支持正则,需要patter类匹配,比较麻烦,这里不适合。直接遍历更方便。 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String raw = in.nextLine(); int score = awardScore(passLenScore(raw), letterScore(raw), numeralScore(raw), symbolScore(raw)); System.out.println(grade.getGrade(score).toString()); } public static int passLenScore(String password) { int length = password.length(); if (length >= 8) { return 25; } else if (length <= 7 && length >= 5) { return 10; } else { return 5; } } public static int letterScore(String password) { int lowNumber = 0; int highNumber = 0; for (char c : password.toCharArray()) { if (Character.isLowerCase(c)) { lowNumber++; } if (Character.isUpperCase(c)) { highNumber++; } } if (lowNumber > 0 && highNumber > 0) { return 20; } else if (lowNumber > 0 || highNumber > 0) { return 10; } else { return 0; } } public static int numeralScore(String password) { int intNumber = 0; for (char c : password.toCharArray()) { if (Character.isDigit(c)) { intNumber++; if (intNumber > 1) { return 20; } } } if (intNumber == 1) { return 10; } else { return 0; } } public static int symbolScore(String password) { int symbolNumber = 0; for (char c : password.toCharArray()) { if (!Character.isDigit(c) && !Character.isLetter(c)) { symbolNumber++; } } if (symbolNumber > 1) { return 25; } else if (symbolNumber == 1) { return 10; } else { return 0; } } public static int awardScore(int lengthScore, int letterScore, int intScore, int symbolScore) { int total = lengthScore + intScore + letterScore + symbolScore; if (intScore > 0 && letterScore == 20 && symbolScore > 0) { total += 5; } else if (intScore > 0 && letterScore > 0 && symbolScore > 0) { total += 3; } else if (intScore > 0 && letterScore == 0 && symbolScore > 0) { total += 2; } return total; } public enum grade { VERY_SECURE(90), SECURE(80), VERY_STRONG(70), STRONG(60), AVERAGE(50), WEAK(25), VERY_WEAK(0); private int score; private grade(int score) { this.score = score; } public int getScore() { return this.score; } public static grade getGrade(int score) { int max = 0; for (grade g : grade.values()) { if (score >= g.getScore()) { max = Math.max(max, g.getScore()); } } grade g1 = null; for (grade g : grade.values()) { if (g.getScore() == max) { g1 = g; } } return g1; } } }