Procédé mot de passe qui contient au moins 1 chiffre, une minuscule, une majuscule et 1 caractère spécial

bstapies:

Je fais une question de codility. La question et le code sont ci-dessous. Je passe tous les tests en plus d'un.

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

Quelqu'un sait pourquoi je suis à défaut? Désolé si le format est mauvais.

Un mot de passe sécurisé nécessite au moins 6 caractères, y compris sans espace, au moins 1 majuscules, minuscules 1, 1 chiffre et 1 caractère spécial (! @ # $% ^ & * () _). Ecrire une méthode chaîne donnée S ou longueur N, retourne vrai si S est sécurisé et retourne false si S est pas sécurisé.

        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 :

Pourquoi êtes-vous constamment vérifier

S.length() >= 6 

A l'intérieur d'une boucle?


Il n'y a pas non plus besoin de garder revérifier pour le chiffre Majuscules, etc sur vous trouver. Vous « seulement » besoin de trouver un omble chevalier pour chaque exigence .


Quelque chose comme ça doit faire le travail

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 ;
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=350221&siteId=1
conseillé
Classement