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");
      }

10-07 19:02
查看更多