一、密码
题目描述
网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C…Z;
2.小写字母:a,b,c…z;
3.数字:0,1,2…9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入 输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出 对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
样例输入 3 a1b2c3d4 Linle@ACM ~@^@!% 样例输出 NO YES NO
1.思路
下面是刚开始我的做法,我的做法是写了四个方法来分别判断数字,大写,小写,特殊符号,做法非常麻烦最后测试也没通过qaq,原来这个题用正则表达式非常简单,通过四个正则表达式的判断,然后通过matches检验字符串是否匹配,可以很快解决问题,正则表达式可以看这篇文章非常详细:正则表达式
错误代码:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class firsttest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int M = scanner.nextInt(); while (M--> 0) { String mes = scanner.next(); if(8 <=mes.length() && mes.length()<16 && temp(mes)+temp1(mes)+temp2(mes)+isSpecialChar(mes)>=3){ System.out.println("YES"); }else{ System.out.println("NO"); } } } //判断字符种类 public static int temp(String message){ int count =0; for(int i = 0;i<message.length();i++){ if(Character.isDigit(message.charAt(i))){ count=1; return count; } } return count; } public static int temp1(String message){ int count = 0; for(int i=0;i<message.length();i++){ if(Character.isLowerCase(message.charAt(i))){ count=1; return count; } } return count; } public static int temp2(String message){ int count = 0; for(int i=0;i<message.length();i++){ if(Character.isUpperCase(message.charAt(i))){ count=1; return count; } } return count; } //判断特殊字符 public static int isSpecialChar(String message){ int count=0; String mes1 = "~,!,@,#,$,%,^"; Pattern p = Pattern.compile(mes1); Matcher m = p.matcher(message); if(m.find()){ return count=1; } return count; } //密码限制 限制输入长度 // 三组-四组四位二进制来表示 0001 0011 0111 1111 // 特殊符号限定 }
2.做法:
import java.util.Scanner; public class secondtest { public static final String shu = ".*\\d+.*"; public static final String daxie = ".*[A-Z]+.*"; public static final String xiaoxie = ".*[a-z]+.*"; public static final String teshu = ".*[~,!,@,#,$,%,^]+.*"; public static boolean Cheeck(String message){ if(message == null || message.length() <8) {return false;} int count = 0; if(message.matches(shu)){ count+=1;} if(message.matches(daxie)){ count+=1; } if(message.matches(xiaoxie)){ count+=1; } if(message.matches(teshu)){ count+=1; } if(count>=3){ return true; } return false; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int M = scanner.nextInt(); while (M--> 0) { String mes = scanner.next(); if(Cheeck(mes)){ System.out.println("YES"); }else{ System.out.println("NO"); } } } }