在 Java 中检查密码的方法不起作用

Method to Check Password in Java Not Working

我正在尝试编写一个方法,returns 如果字符串是或不是 CodeHS 中的有效密码。

长度至少为八个字符,并且只能包含字母和数字。

在评分器中,它通过了除 passwordCheck("codingisawesome")passwordCheck("QWERTYUIOP") 之外的所有测试。

这是我目前的情况:

public boolean passwordCheck(String password)
{
    if (password.length() < 8)
    {
        return false;  
    }
    else 
    {  
        char c;  
        int count = 0;   
        for (int i = 0; i < password.length(); i++) 
        {
            c = password.charAt(i);  
            if (!Character.isLetterOrDigit(c)) 
            {
                return false;  
            } else if (Character.isDigit(c)) 
            {
                count++;     
            }
        }
        if (count < 2)
        {  
            return false;  
        }
    }
    return true;  
}

如果有人能提供帮助,我将不胜感激。谢谢

假设您的要求如前所述

It needs to be at least eight characters long and can only have letters and digits

那就不用数数了。只需检查密码是否为最小长度,然后遍历每个字符,如果不是字母或数字,则返回 false。喜欢,

public boolean passwordCheck(String password) {
    if (password != null && password.length() >= 8) {
        for (char ch : password.toCharArray()) {
            if (!Character.isLetterOrDigit(ch)) {
                return false;
            }
        }
        return true;
    }
    return false;
}

尝试一种使用模式的方法(这比循环更简单):

public boolean passwordCheck(String password)
{
    return password!=null && password.length()>=8 && password.matches("[A-Za-z0-9]*");
}

关于正则表达式的体面教程(这就是 A-Z 魔法的来源):http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

它没有通过这些测试,因为您的代码检查密码必须至少有 2 位数字:-

if (count < 2)
{  
    return false;  
}

而你的测试字符串没有。删除这段代码,它应该可以工作。有关更好的方法,请参阅其他答案。