题解 | #密码强度等级#

密码强度等级

https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String pwdV = sc.nextLine();

        //1、密码长度:
        int pwdLenPoint = 10;
        if (pwdV.length() >= 8) {
            pwdLenPoint = 25;
        } else if (pwdV.length() <= 4) {
            pwdLenPoint = 5;
        }

        //2、密码是否包含字母
        int pwdAaPoint = 0;
        if (containsZ("a-z", pwdV) || containsZ("A-Z", pwdV)) {
            pwdAaPoint = 10;
            if (containsZ("a-z", pwdV) && containsZ("A-Z", pwdV)) {
                pwdAaPoint = 20;
            }
        }
        //3、数字个数
        int pwdDigitPoint =containDigitCnt(pwdV) > 1?20:(containDigitCnt(pwdV) == 1?10:0)
;       
        //4、符号个数
        int signCnt=containSignCnt(pwdV);
        int pwdSignPoint = signCnt>1?25:(signCnt==1?10:0);


        //5、奖励
        int pwdAwardPoint = 0;
        if (pwdSignPoint > 0 & pwdDigitPoint > 0 ) {
            pwdAwardPoint = pwdAaPoint == 10 ? 3 : (pwdAaPoint == 20 ? 5 : 0);
        } else {
            pwdAwardPoint = pwdDigitPoint > 0 & pwdAaPoint > 0 ? 2 : 0;
        }

        int totalPoint = pwdAwardPoint + pwdDigitPoint + pwdSignPoint + pwdAaPoint +
                         pwdLenPoint;

        String rs = "VERY_WEAK";
        if (totalPoint >= 90) {
            rs = "VERY_SECURE";
        } else if (totalPoint >= 80) {
            rs = "SECURE";
        } else if (totalPoint >= 70) {
            rs = "VERY_STRONG";
        } else if (totalPoint >= 60) {
            rs = "STRONG";
        } else if (totalPoint >= 50) {
            rs = "AVERAGE";
        } else if (totalPoint >= 25) {
            rs = "WEAK";
        }
        System.out.print(rs);

    }

/*求字符个数,排除掉字符串里字母和数字个数,剩余为符号个数*/
 static int containSignCnt(String str) {
     
        char[] charArr = str.toCharArray();
        int count = 0;
        for (Character c : str.toCharArray()) {
            count = Character.isLetterOrDigit(c) ? ++count : count;
        }
        int signCnt=str.length()-count;
        return signCnt>0?signCnt:0;

    }


//求数字个数
    static int containDigitCnt(String str) {
        char[] charArr = str.toCharArray();
        int count = 0;
        for (Character c : str.toCharArray()) {
            count = Character.isDigit(c) ? ++count : count;
        }
        return count;

    }
    //是否含有字母
    static boolean containsZ(String pattern, String str) {
        Pattern p = Pattern.compile("[" + pattern + "]");
        Matcher matcher = p.matcher(str);
        return matcher.find();
    }
}

全部评论

相关推荐

暑期是进不了大厂了想问问前端友友们&nbsp;,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
群星之怒:1.照片可以换更好一点的,可以适量P图,带一些发型,遮住额头,最好穿的正式一点,可以适当P图。2.内容太少。建议添加的:求职意向(随着投递岗位动态更改);项目经历(内容太少了建议添加一些说明,技术栈:用到了什么技术,还有你是怎么实现的,比如如何确保数据传输稳定的,角色注册用到了什么技术等等。)项目经历是大头,没有实习是硬伤,如果项目经理不突出的话基本很难过简历筛。3.有些内容不必要,比如自我评价,校内实践。如果实践和工作无关千万别写,不如多丰富丰富项目。4.排版建议:建议排版是先基础信息,然后教育背景(要突出和工作相关的课程),然后专业技能(一定要简短,不要长篇大论,写你会什么,会的程度就可以),然后是项目经历(一定要详细,占整个简历一定要超过一半,甚至超过百分之70都可以)。最后如果有一部分空白的话可以填补上校内获得的专业相关的奖项,没有就写点校园经历和自我评价。5.技术一定要够硬,禁得住拷打。还有作息尽量保证正常,不要太焦虑。我24双非本科还是非科班,秋招春招各找了一段实习结果都没有转正,当时都想噶了,最后6月份在校的尾巴也找到一份工作干到现在,找工作有时很看运气的不要急着自我否定。 加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务