2012-07-31 130 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; 
}