我的两个密码验证方法有问题。 方法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;
}
答案 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;
}