题解 | #密码强度等级#注意边界

密码强度等级

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;
        }
    }
}

全部评论

相关推荐

05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务