帮助在java中创建密码检查器

Che*_*err 5 java string passwords loops

我正在尝试用Java创建一个程序来检查三个特定的输入.它必须通过这些测试:

  1. 至少7人物.
  2. 包含两个upperlower大小写字母字符.
  3. 包含至少1数字.

到目前为止,我已经能够检查是否有7个字符,但我遇到了最后两个问题.作为if语句,我应该在循环中放入什么来检查数字并使其成为大写和小写.任何帮助将不胜感激.这是我到目前为止所拥有的.

import java.awt.*;
import java.io.*;
import java.util.StringTokenizer;

public class passCheck
{


    private static String getStrSys ()
    {
        String myInput = null;          //Store the String that is read in from the command line

        BufferedReader mySystem;        //Buffer to store the input

        mySystem = new BufferedReader (new InputStreamReader (System.in)); //creates a connection to system input
        try
        {
            myInput = mySystem.readLine (); //reads in data from the console
            myInput = myInput.trim ();
        }
        catch (IOException e)  //check
        {
            System.out.println ("IOException: " + e);
            return "";
        }
        return myInput; //return the integer to the main program
    }


    //****************************************
    //main instructions go here
    //****************************************

    static public void main (String[] args)
    {

        String pass;         //the words the user inputs
        String temp = "";            //holds temp info

        int stringLength;          //length of string
        boolean goodPass = false;


        System.out.print ("Please enter a password: ");  //ask for words

        pass = getStrSys ();                              //get words from system
        temp = pass.toLowerCase ();
        stringLength = pass.length ();             //find length of eveyrthing



        while (goodPass == false)

            {
                if (stringLength < 7)
                {
                    System.out.println ("Your password must consist of at least 7 characters");
                    System.out.print ("Please enter a password: ");  //ask for words
                    pass = getStrSys ();
                    stringLength = pass.length ();
                    goodPass = false;
                }
                else if (/* something to check for digits */)
                {

                }

            }
Run Code Online (Sandbox Code Playgroud)

cle*_*tus 7

当然,你可以提出一个令人费解的 - 几乎不可读的 -regex来做这个,但我不建议.除了可读性方面,如果密码失败,它不会告诉您原因.这解决了这两个问题:

while (true) {
  pass = getStrSys();
  if (pass.length() < 7) {
    System.out.println("must be at least 7 characters long");
  } else {
    boolean upper = false;
    boolean lower = false;
    boolean number = false;
    for (char c : pass.toCharArray()) {
      if (Character.isUpperCase(c)) {
        upper = true;
      } else if (Character.isLowerCase(c)) {
        lower = true;
      } else if (Character.isDigit(c)) {
        number = true;
      }
    }
    if (!upper) {
      System.out.println("must contain at least one uppercase character");
    } else if (!lower) {
      System.out.println("must contain at least one lowercase character");
    } else if (!number) {
      System.out.println("must contain at least one number");
    } else {
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)