使用Java字符密码返回正确代码时出现问题

使用Java字符密码返回正确代码时出现问题,java,error-handling,passwords,Java,Error Handling,Passwords,我遇到的问题是,当有人输入包含数字、大写和小写的密码时,程序仍然会说他们需要所有这些密码 我需要该程序列出所有的密码要求,如果他们没有得到满足 例如: A123456789aa返回:“您至少需要一个小写字母。请输入您的密码:” 它应该返回:“输入终止键” publicstaticvoidmain(字符串[]args){ 扫描仪输入=新扫描仪(System.in); 布尔条件=真; while(条件){ System.out.print(“请输入密码:”); 字符串密码=input.nextLin

我遇到的问题是,当有人输入包含数字、大写和小写的密码时,程序仍然会说他们需要所有这些密码

我需要该程序列出所有的密码要求,如果他们没有得到满足

例如:

A123456789aa返回:“您至少需要一个小写字母。请输入您的密码:”

它应该返回:“输入终止键”

publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
布尔条件=真;
while(条件){
System.out.print(“请输入密码:”);
字符串密码=input.nextLine();
if(password.equals(“endofinput”)){
System.out.print(“您的密码有效”);条件=false;
}否则{
系统输出打印(密码检查);
条件=真;
}
}
input.close();
}
公共静态字符串密码检查(字符串密码){
字符串specialChars=“/*!@$%^&*()\”{}\u[]\ 124;\?/,.“+”;
if(password.length()<8){
return(“您至少需要8个字符。”);
}对于(int i=0;i
您的passCheck方法迭代所有字符,如果一个字符不能满足您的一个需求,则返回一个结果。另一种方法是假设输入无效,直到满足所有需求:

boolean foundUppercase = false;
    boolean foundLowercase = false;
    boolean foundDigits = false;
    //Dont have to do the check for password as input for every letter in the word.
    if (password.equals("password"))
        return ("Your password cannot be password. ");

    for (int i = 0; i < password.length(); i++) {
        if (specialChars.contains(password.substring(i)))
            //only in this case we can for sure say that the input is not valid
            return ("Your password cannot contain special characters. ");
        else if (Character.isUpperCase(password.charAt(i)))
            foundUppercase=true;
        else if (Character.isLowerCase(password.charAt(i)))
            foundLowercase= true;
        else if (Character.isDigit(password.charAt(i)))
            foundDigits = true;
    }
    if (!foundUppercase) {
        // uppercase letter missing
        return ("You need at least one uppercase. ");
    } else if (!foundLowercase) {
        // lower case letter missing
        return ("You need at least one lowercase. ");
    } else if (!foundDigits) {
        // missing digits
        return ("You need at least one digit. ");
    }

    return "Enter termination key";
boolean foundUppercase=false;
boolean foundLowercase=false;
布尔数字=假;
//不必检查密码作为单词中每个字母的输入。
if(password.equals(“password”))
return(“您的密码不能是密码”);
对于(int i=0;i
您的passCheck方法迭代所有字符,如果一个字符不能满足您的一个需求,则返回一个结果。另一种方法是假设输入无效,直到满足所有需求:

boolean foundUppercase = false;
    boolean foundLowercase = false;
    boolean foundDigits = false;
    //Dont have to do the check for password as input for every letter in the word.
    if (password.equals("password"))
        return ("Your password cannot be password. ");

    for (int i = 0; i < password.length(); i++) {
        if (specialChars.contains(password.substring(i)))
            //only in this case we can for sure say that the input is not valid
            return ("Your password cannot contain special characters. ");
        else if (Character.isUpperCase(password.charAt(i)))
            foundUppercase=true;
        else if (Character.isLowerCase(password.charAt(i)))
            foundLowercase= true;
        else if (Character.isDigit(password.charAt(i)))
            foundDigits = true;
    }
    if (!foundUppercase) {
        // uppercase letter missing
        return ("You need at least one uppercase. ");
    } else if (!foundLowercase) {
        // lower case letter missing
        return ("You need at least one lowercase. ");
    } else if (!foundDigits) {
        // missing digits
        return ("You need at least one digit. ");
    }

    return "Enter termination key";
boolean foundUppercase=false;
boolean foundLowercase=false;
布尔数字=假;
//不必检查密码作为单词中每个字母的输入。
if(password.equals(“password”))
return(“您的密码不能是密码”);
对于(int i=0;i
您可以使用此验证功能

public static String passCheck(String password) {
    //String specialChars = "/*!@#$%^&*()\"{}_[]|\\?/<>,." + " ";
    String expected_pattern = "^[a-zA-Z0-9]{8,}$";
    String lowercase_pattern = "(.*)[a-z]+(.*)";
    String uppercase_pattern = "(.*)[A-Z]+(.*)";
    String digit_pattern = "(.*)[0-9]+(.*)";

    if (password == null || password.length() < 8) return ("You need at least 8 characters. ");     
    if (password.toLowerCase().equals("password")) return ("Your password cannot be password. ");
    if (!password.matches(lowercase_pattern)) return ("You need at least one lowercase. ");
    if (!password.matches(uppercase_pattern)) return ("You need at least one uppercase. ");
    if (!password.matches(digit_pattern)) return ("You need at least one digit. ");
    if (!password.matches(expected_pattern)) return ("Your password cannot contain special characters. ");

    return "Enter termination key";
}
公共静态字符串密码检查(字符串密码){
//字符串specialChars=“/*!@$%^&*()\”{}\u[]\ 124;\?/,.“+”;
字符串应为_pattern=“^[a-zA-Z0-9]{8,}$”;
字符串小写字母_pattern=“(.*)[a-z]+(.*);
字符串大写字母_pattern=“(.*)[A-Z]+(.*)”;
字符串数字_pattern=“(.[0-9]+(.*)”;
if(password==null | | password.length()<8)返回(“至少需要8个字符”);
if(password.toLowerCase().equals(“password”))返回(“您的密码不能是password”);
if(!password.matches(小写字母_模式))返回(“您至少需要一个小写字母”);
if(!password.matches(大写字母_模式))返回(“至少需要一个大写字母”);
如果(!password.matches(digit_pattern))返回(“您至少需要一个数字”);
if(!password.matches(预期的_模式))返回(“您的密码不能包含特殊字符”);
返回“输入终止键”;
}

您可以使用此验证功能

public static String passCheck(String password) {
    //String specialChars = "/*!@#$%^&*()\"{}_[]|\\?/<>,." + " ";
    String expected_pattern = "^[a-zA-Z0-9]{8,}$";
    String lowercase_pattern = "(.*)[a-z]+(.*)";
    String uppercase_pattern = "(.*)[A-Z]+(.*)";
    String digit_pattern = "(.*)[0-9]+(.*)";

    if (password == null || password.length() < 8) return ("You need at least 8 characters. ");     
    if (password.toLowerCase().equals("password")) return ("Your password cannot be password. ");
    if (!password.matches(lowercase_pattern)) return ("You need at least one lowercase. ");
    if (!password.matches(uppercase_pattern)) return ("You need at least one uppercase. ");
    if (!password.matches(digit_pattern)) return ("You need at least one digit. ");
    if (!password.matches(expected_pattern)) return ("Your password cannot contain special characters. ");

    return "Enter termination key";
}
公共静态字符串密码检查(字符串密码){
//字符串specialChars=“/*!@$%^&*()\”{}\u[]\ 124;\?/,.“+”;
字符串应为_pattern=“^[a-zA-Z0-9]{8,}$”;
字符串小写字母形式=”(