2012-07-31 73 views
2

我的两个密码验证方法有问题。 hasDigitsAndLetters方法应该检查字符串的所有字符是否都是数字和字母,第二种方法有两个数字应该检查通过中是否至少有两位数字,但问题在于对于预期的结果是true拖延假。如果有人可以帮忙。这里是代码。检查数字和字母的密码

//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; 
    } 
+1

'Character.isxxx(pass.charAt(I))' – assylias 2012-07-31 18:38:57

回答

6

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

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

相同的数字也

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

是的,你说得对,我想那样做Character.isLetterOrDigit(的charAt(I)),但有一些错误,但马塔的欢呼声! – 2012-07-31 18:41:48

+0

不客气! – kosa 2012-07-31 18:42:27

+0

更不用说'Character.isDigit((pass.charAt(i)))'另一个。否则,你根本不会检查密码。 – Qsario 2012-07-31 18:42:30

2

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

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

您没有核对字符在您的中,您需要将支票更改为:

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

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

现在你正在检查,如果我是一个数字或字母,我是一个int。你需要检查位置i上的字符。

if(Character.isDigit(pass.charAt(i))) 
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; 
}