编程题集锦8:密码验证合格程序

文章目录


链接:密码验证合格程序
来源:牛客网

问题描述:

编程题集锦8:密码验证合格程序

解题思路:

观察题意密码要求:
1.长度超过8位(最好解决)
2.包括大小写字母.数字.其它符号,以上四种至少三种(不好弄)
3.不能有相同长度超2的子串重复,说明:长度超过2的子串(不好弄)

经过看大佬的博客,发现了String类中有一个String.matches() ,这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false;

这个方法可以完美的解决密码的剩下的要求,但是呢里边要涉及到正则表达式,这里又是很多人的痛点,所以这里是那个大佬的博客链接:String.matches()的用法

解题代码:

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            while (scanner.hasNextLine()) {
                String input = scanner.nextLine();
                //counter的作用是验证要求2:至少三种输入类型,每当密码中有一个类型时就+1
                int counter = 0;
                //这个下边可能就是你懵逼的开始,所以我把下边用到的正则表达式给你一一写出来
                if (input.matches(".*\\d.*"))
                    counter++;
                if (input.matches(".*[a-z].*"))
                    counter++;
                if (input.matches(".*[A-Z].*"))
                    counter++;
                if (input.matches(".*[^a-zA-Z0-9].*"))
                    counter++;
                //&&之前是为了验证要求1和2,&&之后是为了验证要求3

                if (input.length() > 8 &&counter >= 3 && !input.matches(".*(...).*\\1.*"))
                    System.out.println("OK");
                else
                    System.out.println("NG");
            }
        }
    }
}

扩充知识:

1.String.matches()用法:

编程题集锦8:密码验证合格程序

2.有关代码里用到的正则表达式:

表达式 可匹配
. 匹配除了换行符(\n)以外的任意一个字符
* 不出现或出现任意次,相当于 {0,},比如:"^*b"可以匹配 “b”,"^^^b"…
\\ 代表\本身
\d 任意一个数字,0~9 中的任意一个
[a-z] 匹配 “a”~“z” 之间的任意一个字母
[A-Z] 匹配 “A”~“Z” 之间的任意一个字母
[^a-zA-Z0-9] 匹配 “a”-“z”,“A”-“Z”,“0”-“3” 之外的任意一个字符
(…).*\1 为了匹配长度超过2的字符串,一旦重复返回true
正则表达式中的小括号"()"是代表分组的意思,注意:\1必须与小括号配合使用 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同。
上一篇:获取bing必应图片


下一篇:PHP安全-转义