主要问题在于如何判断数字、字母、字符及其个数:
1.灵活运用正则表达式;
2.使用Character方法,对字符串中的每个字符进行判断,并累计个数;
import java.util.*;
import java.util.regex.*;
//方法:
//1.灵活运用正则表达式;
//2.使用Character.isDigit()/isLetter()/isUpperCase()/isLowerCase()
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
String input = scan.nextLine();
int grade=0;
//密码长度
if(input.length()<=4){
grade+=5;
}else if(input.length()<=7){
grade+=10;
}else{
grade+=25;
}
//字母
boolean hasLetter=true;
boolean hasUpper=Pattern.compile("[A-Z]").matcher(input).find();
boolean hasLower=Pattern.compile("[a-z]").matcher(input).find();
boolean isAllUpper=hasUpper&&!hasLower;
boolean isAllLower=!hasUpper&&hasLower;
if(!hasUpper&&!hasLower){
grade+=0;
hasLetter=false;
}else if(isAllUpper||isAllLower){
grade+=10;
}else{
grade+=20;
}
//数字
boolean hasDigit=true;
String str1=input.replaceAll("[^0-9]","");//将数字外其他字符删去
if(str1.length()==0){
grade+=0;
hasDigit=false;
}else if(str1.length()==1){
grade+=10;
}else{
grade+=20;
}
//符号
boolean hasSymbol=true;
String str2=input.replaceAll("[0-9a-zA-Z\\s]","");//将数字、字母、空格删去,仅剩余字符
if(str2.length()==0){
grade+=0;
hasSymbol=false;
}else if(str2.length()==1){
grade+=10;
}else {
grade+=25;
}
//奖励
if(hasLetter&&hasDigit&&!hasSymbol){
grade+=2;
}else if((isAllUpper||isAllLower)&&hasDigit&&hasSymbol){
grade+=3;
}else if((hasUpper&&hasLower)&&hasDigit&&hasSymbol){
grade+=5;
}
//输出
if(grade>=90){
System.out.println("VERY_SECURE");
}else if(grade >=80){
System.out.println("SECURE");
}else if(grade >=70){
System.out.println("VERY_STRONG");
}else if(grade >=60){
System.out.println("STRONG");
}else if(grade >=50){
System.out.println("AVERAGE");
} else if(grade >=25){
System.out.println("WEAK");
}else{
System.out.println("VERY_WEAK");
}
}
}