ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-03-06 12:37:33  阅读:477  来源: 互联网

标签:counter 匹配 String 验证 matches 编程 集锦 input 任意


文章目录


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

问题描述:

在这里插入图片描述

解题思路:

观察题意密码要求:
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则是代表与第一个小括号中要匹配的内容相同。

标签:counter,匹配,String,验证,matches,编程,集锦,input,任意
来源: https://blog.csdn.net/qq_44840148/article/details/104692569

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有