少なくとも1桁、1つの小文字、1つの大文字&1つの特殊文字が含まれているメソッドのパスワード

bstapies:

私はcodilityの質問をしています。質問とコードは以下の通りです。私は1つ以外のすべてのテストケースを渡しています。

Example test:   'F0bar! F0bar!'
WRONG ANSWER (got True expected False) 

私はこれを失敗していますなぜ誰もが知っていますか?申し訳ありませんフォーマットが悪い場合。

安全なパスワードには、スペースを含まない、少なくとも6つの文字、少なくとも1大文字、小文字の1、1桁と1つの特殊文字(!@#$%^&*()_)が必要です。Sが確保されていない場合、Sが偽安全であると返した場合、指定された文字列Sまたは長さNは、trueを返すという方法を記述します。

        import java.util.*;

// Could use regular expression but more confortable with this approach
// Using Character and String built-in java classes

class Solution {
    public boolean solution(String S) {
        String specialChars = "!@#$%^&*()_";
        char character;
        boolean isDigit = false;
        boolean isLower = false;
        boolean isUpper = false;
        boolean isSpecialChar = false; 
        for (int i = 0; i <= S.length(); i++){
            character = S.charAt(i);
            if (S.length() >= 6 && Character.isDigit(character)){
                isDigit = true;
            } else if (S.length() >= 6 && Character.isLowerCase(character)){
                isLower = true;
            } else if (S.length() >= 6 && Character.isUpperCase(character)){
                isUpper = true;
            } else if (S.length() >= 6 && specialChars.contains(String.valueof(character))){
                isSpecialChar = true;
            }
        }
        return isDigit && isLower && isUpper && isSpecialChar;
    }
}
RR_IL:

なぜあなたは常にチェックしています

S.length() >= 6 

ループ内で?


あなたがそれを見つけると数字、大文字、などのために再チェック維持する必要もありません。あなた「だけにする」必要性1つの見つけるそれぞれの文字の要件を


このような何かは仕事をしなければなら

static String specialChars = "!@#$%^&*()";
public static boolean solution(String S) { 
    char currentChar;

    boolean hasDigit = false;
    boolean hasLower = false;
    boolean hasUpper = false;
    boolean hasSpecialChar = false;   
    boolean hasSpace = false;

    if(S.length() < 6)
        return false;

    for (int i = 0; !hasSpace && i < S.length(); i++){
        currentChar = S.charAt(i); 
        if (!hasDigit && Character.isDigit(currentChar))
            hasDigit = true; 
         if(!hasLower && Character.isLowerCase(currentChar))
            hasLower = true;
        if (!hasUpper && Character.isUpperCase(currentChar))
            hasUpper = true; 
        if(currentChar == ' ')
            hasSpace = true;
        if(!hasSpecialChar && specialChars.indexOf(currentChar)!=-1)
            hasSpecialChar = true;
    }
    return hasDigit && hasLower && hasUpper && hasSpecialChar && !hasSpace ;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=350220&siteId=1