import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("Generate your Security Code ");
String password=sc.next();
if(password.length()>=8)
{
Pattern letter = Pattern.compile("[a-z]{1}[A-z]{1}");
Pattern digit = Pattern.compile("[0-9]");
Pattern special = Pattern.compile ("[@#*]{1}");
Matcher hasLetter = letter.matcher(password);
Matcher hasDigit = digit.matcher(password);
Matcher hasSpecial = special.matcher(password);
if(hasLetter.find() && hasSpecial.find() &&hasDigit.find()){
System.out.println("Security Code Generated Successfully");
}
}
else{
System.out.println("Invalid Security Code, Try Again!");
}
}
}
我写了一个密码生成代码,但是一个测试用例失败了,密码中的数字不是强制性的,我该怎么做?
项目清单
最佳答案
如果要更改可选数字的正则表达式,请添加*
。
另一种解决方法是使用||
代替&&
if(hasLetter.find() && hasSpecial.find() ||hasDigit.find()){
System.out.println("Security Code Generated Successfully");
}