验证密码

时间:2017-05-25 18:48:18

标签: java string validation boolean

我想检查密码是否至少包含8个字符,并且仅包含数字和字母。 这里的问题是即使我输入了有效的密码,它始终显示“无效”。这是代码。感谢。

public static void main(String[] args)
{
    String pw;
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter a password: ");
    pw = sc.next();

    if(isValid(pw)==true)
    {
        System.out.println("Valid Password");
    }
    else
    {
        System.out.println("Invalid Password");
    }

}

public static boolean isValid(String pw)
{
    if(pw.length()<8)
    {
        return false;
    }
    else
    {
        for(int x=0; x<pw.length(); x++)
        {

            return Character.isLetterOrDigit(pw.charAt(x));

        }
    }
    return true;
}

}

2 个答案:

答案 0 :(得分:3)

除了isValid方法中'for'循环中的return语句外,代码的逻辑是正确的。这是编辑的代码:

public static void main(String[] args)
{
    String pw;
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter a password: ");
    pw = sc.next();

    if(isValid(pw))
    {
        System.out.println("Valid Password");
    }
    else
    {
        System.out.println("Invalid Password");
    }

}

public static boolean isValid(String pw)
{
    if(pw.length()<8)
    {
        return false;
    }
    else
    {
        for(int x=0; x<pw.length(); x++)
        {
            if(!Character.isLetterOrDigit(pw.charAt(x)))
                 return false;
        }
    }
    return true;
}

请注意,如果您的密码有效,您的代码不会打印“无效”,但对于某些无效密码(例如@@@@@@@@

)可能会打印“有效”

答案 1 :(得分:2)

您在循环的第一次迭代中返回结果,而应该创建一个标志变量并在循环结束时返回结果,或者您可以在循环内反转if条件如果计算结果为 true ,则返回 false ,如果没有,则返回 true

public static boolean isValid(String password){
    if(password.length() < 8)
        return false;

    for(int x = 0; x < password.length(); x++)
        if(!Character.isLetterOrDigit(password.charAt(x)))
            return false;

    return true;
}