检查数字和字母的密码

时间:2012-07-31 18:37:14

标签: java passwords

我的两个密码验证方法有问题。 方法hasDigitsAndLetters应该检查字符串的所有字符是否是数字和字母,第二种方法hasTwoDigits应该检查传递中是否至少有两位数,但问题是对于预期的结果是真的它们是ruturning假。如果有人可以帮忙。这是代码。

//check if the whole string consists of digits and letters
    public static boolean hasDigitsAndLetters(String pass)
    {
        for(int i=0; i<pass.length(); i++)
        {
            if(!Character.isLetterOrDigit((i)))
            {
                return false;
            }

        }
        return true;
    }



    // check whether the password has at least 2 digits
    public static boolean hasTwoDigits(String pass)
    {
        int counter = 0;
        for(int i=0; i<pass.length(); i++)
        {
            if(Character.isDigit(i))
            {
                counter ++;
            }

        }
        System.out.println("Number of digits: " + counter);
        if(counter >= 2)
        {
            return true;
        }
        return false;
    }

5 个答案:

答案 0 :(得分:6)

您需要在该字符串的i位置传递字符。

Character.isLetterOrDigit((pass.charAt(i)))

也适用于数字

Character.isDigit((pass.charAt(i)))

答案 1 :(得分:2)

您想检查索引i的字符串中的字符,而不是索引变量本身:

Character.isLetterOrDigit(pass.charAt(i))

答案 2 :(得分:2)

您没有检查pass中的字符,您需要将支票更改为:

if(!Character.isLetterOrDigit((pass.charAt(i)))

if(Character.isDigit(pass.charAt(i)))

答案 3 :(得分:2)

现在你正在检查我是一个数字还是字母而且我是一个int。你需要检查位置i的角色。

if(Character.isDigit(pass.charAt(i)))

答案 4 :(得分:1)

错误在于您将位置与字符串进行比较,而不是字符串中该位置的字符。我可能不会使用charAt,但是......在这里保持对位置的明确管理没有意义。我建议你改用String.toCharArray

public static boolean isAlphanumeric(final String str) {
  for (char c : str.toCharArray()) {
    if (!Character.isLetterOrDigit(c)) {
      return false;
    }
  }
  return true;
}

public static boolean isBidigital(final String str) {
  int n = 0;
  for (char c : str.toCharArray()) {
    if (Character.isDigit(c)) {
      ++n;
    }
  }
  return n >= 2;
}