справка с созданием средства проверки пароля в Java

Я пытаюсь сделать программу в Java, который проверяет на три определенных исходных данные. Это должно иметь, проходят эти тесты:

  1. По крайней мере, 7 персонажи.
  2. Содержите обоих upper и lower буквенные символы случая.
  3. Содержите, по крайней мере, 1 цифра.

До сих пор я смог заставить его проверить, существует ли 7 символов, но я испытываю затруднения из-за последних двух. Что я должен вставить свой цикл как если оператор, чтобы проверить на цифры и сделать его верхним регистром и нижним регистром. Любая справка значительно ценилась бы. Вот то, что я имею до сих пор.

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 */)
                {

                }

            }
5
задан Austyn Mahoney 19 September 2011 в 19:35
поделиться

3 ответа

Конечно, вы можете придумать запутанное - почти нечитаемое - регулярное выражение для этого, но я бы не стал его предлагать. Помимо аспекта удобочитаемости, если пароль не работает, он не говорит вам, почему. Это решает обе эти проблемы:

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;
    }
  }
}
7
ответ дан 18 December 2019 в 14:44
поделиться
  1. Не используйте StringTokenizer. Используйте String.split.
  2. Используйте функции класса Character для проверки верхнего, нижнего или числового регистра.
  3. Поскольку вы используете строчные буквы, вы не можете делать чек. Вам нужно избавиться от этого.
1
ответ дан 18 December 2019 в 14:44
поделиться

Регулярное выражение больше подходит для того, что вы пытаетесь выполнить. Например, используя утверждения упреждения , вы должны использовать что-то вроде этого:

Pattern p = Pattern.compile("^.*(?=.{7,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$");
String pass = getStrSys();
Matcher m = p.matcher(pass);
if (m.matches()) {
  System.out.println("Valid password.");
} else {
  System.out.println("Invalid password.");
} 
4
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: