编程题:密码验证合格程序


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

问题描述:

在这里插入图片描述

解题思路:

观察题意密码要求:
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()用法:

在这里插入图片描述

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则是代表与第一个小括号中要匹配的内容相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值