J'ai divisé une chaîne qui est un mot de passe entré par l'utilisateur pour ne renvoyer que des chiffres. Je dois m'assurer que les chiffres qu'ils ont saisis ne sont pas certains. Mais d'abord, je dois prendre les données qui reviennent et les transformer en un int afin que je puisse comparer.

public static boolean checkPassword(String password){
      String digitsRegrex = "[a-zA-Z]+";
      int upPass;

      String [] splitPass = password.split("[a-zA-Z]+");
      for(String pass : splitPass){
         try{
            upPass = Integer.parseInt(pass);
         }
         catch (NumberFormatException e){
            upPass = 0;
         }       
         System.out.println(upPass);
      }  
      return true;   
  }

Lorsque j'exécute le programme, je récupère le 0 (et les chiffres du mot de passe de la chaîne) dans la capture, donc l'essai ne fonctionne pas, je suppose?

0
E.S. 4 nov. 2019 à 07:27

1 réponse

Meilleure réponse

Dans votre code, vous définissez upPass sur 0 lorsque vous rencontrez une sous-chaîne qui ne contient aucun chiffre. Ce sont des chaînes vides . Cela se produit lorsque le mot de passe ne commence pas par un chiffre.

Vous devez l'ignorer car vous n'avez besoin que de chiffres.

Exemple: abcd12356zz33 - lorsque vous vous séparez à l'aide de l'expression régulière [a-zA-Z]+, vous obtenez "", "123456" et "33". Lorsque vous essayez de convertir la première chaîne vide en un nombre, vous obtenez un NumberFormatException.

for(String pass : splitPass){
    if (!pass.isEmpty()) {
        try {
            upPass = Integer.parseInt(pass);
            System.out.println(upPass);
            //Validate upPass for the combination of numbers
        } catch (NumberFormatException e) {
            throw e;
        }
    }
}

checkPassword("abcd12356zz33")

impressions

12356
33
0
user7 4 nov. 2019 à 04:42