密码检查:
问题描述:
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
-
密码只能由大写字母,小写字母,数字构成;
-
密码不能以数字开头;
-
密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
-
密码长度至少为8
现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
输入描述:
输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。
输出描述:
输入n行,如果密码合法,输出YES,不合法输出NO
示例1
1
结果
YES
代码:
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//键盘接收密码条数
int n = sc.nextInt();
String[] arr = new String[n];
//利用for循环连续接收字符串,并将每一条密码用字符串数组储存
for(int i=0;i<arr.length;i++){
arr[i] = sc.next();
}
//获得每个字符串的长度
for(int i=0;i<arr.length;i++){
System.out.println(Length(arr[i]));
}
}
/**
密码长度的判断(长度不小于8)
*/
public static String Length(String str){
if(str.length()<8){
return "NO";
}
/**
每条密码的首位不是数字
*/
if(str.charAt(0)<='9'&&str.charAt(0)>='0'){
return "NO";
}
/**
密码中大小写字母和数字的统计,以及对每条密码的构成进行判断
*/
int count1=0,count2=0,count3=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)<'0'||(str.charAt(i)>'9'&str.charAt(i)<'A')||(str.charAt(i)>'Z'&str.charAt(i)<'a')||str.charAt(i)>'z'){
return "NO";
}
if(str.charAt(i)<='9'&&str.charAt(i)>='0'){
count1 =1;
}
if(str.charAt(i)<='z'&&str.charAt(i)>='a'){
count2 =1;
}
if(str.charAt(i)<='Z'&&str.charAt(i)>='A'){
count3 =1;
}
}
//判断是否由大小写字母和数字的其中两种构成
if(count1+count2+count3>=2){
return "YES";
}else{
return "NO";
}
}
}
示例的运行结果截图: