不使用Regex验证Java密码

ezykj2lf  于 11个月前  发布在  Java
关注(0)|答案(2)|浏览(105)

我对Java非常陌生,并且已经练习了好几天了。这个练习的目标是在不使用正则表达式的情况下验证密码。
本练习的要求是:通过控制台,要求用户按照以下要求创建密码。密码必须包含:○至少一个小写字母○至少一个小写字母 ○至少7个字符○至少12个字符 * ○感叹号:! ●如果用户满足所有要求,则将字符串“Password valid and accepted”打印到控制台●如果密码不满足任何要求,则打印字符串“Error“。
我的问题是,我不能得到设置的最大和最小长度的密码要求为7分钟和12最大。我也有麻烦添加“!”作为密码要求。有人可以请指导我在正确的方向?

Via the console, ask the user to create a password with the following requirements.

字符串
密码必须包含:○至少一个密码字母○至少一个密码字母○最少7个字符○最多12个字符○感叹号:!●如果用户满足所有要求,则将字符串“Password valid and accepted”打印到控制台●如果密码不满足任何要求,则打印字符串“Error“。

import java.util.Scanner;

public class WhatToEat {
public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * At Least One Lower case
         * At Least one Upper case
         * At least 7 Characters minimum 
         * At least 12 characters maximum
         * Exclamation mark required
         */
        
        final int MIN_LENGTH = 7;
        final int MAX_LENGTH = 12;
        final int NUM_UPPER_LETTERS = 1;
        final int NUM_LOWER_LETTERS = 1;
        final int NUM_DIGITS =0;
        int minLength = 0;
        int maxLength = 0;
        int upperCount = 0;
        int lowerCount = 0;
        int digitCount = 0;
        
        try (Scanner in = new Scanner(System.in)) {
            System.out.print("Enter Password Here:");
            String input = in.nextLine();
            int inputLen = input.length();
            for (int i = 0; i < inputLen; i++) {
                char ch = input.charAt(i);
                if (Character.isUpperCase(ch))
                    upperCount++;
                else if (Character.isLowerCase(ch))
                    lowerCount++;
                else if (Character.isDigit(ch))
                    digitCount++;   
                else if (Character.isDigit(ch))
                    minLength++;
                else if (Character.isDigit(ch))
                    maxLength++;
            }
        }
        if(upperCount <= NUM_UPPER_LETTERS 
                && lowerCount <= NUM_LOWER_LETTERS 
                && digitCount <= NUM_DIGITS 
                && minLength <= MIN_LENGTH
                && maxLength <= MAX_LENGTH)
            System.out.println("Password valid and accepted");
        else {
            System.out.println("Error");

jyztefdp

jyztefdp1#

这最后一个IF-Else部分需要修改如下:我添加了“!”检查,也关于最小值和最大值,它应该与密码字符串长度进行比较,以检查密码是否在范围内,就像我做的那样,你应该删除最后两个Else-IF

if(upperCount <= NUM_UPPER_LETTERS 
            && lowerCount <= NUM_LOWER_LETTERS 
            && digitCount <= NUM_DIGITS 
            && inputLen >= MIN_LENGTH
            && inputLen <= MAX_LENGTH
            && input.contains("!"))
        System.out.println("Password valid and accepted");
    else {
        System.out.println("Error");

字符串

goucqfw6

goucqfw62#

你也应该改变这个

if(upperCount <= NUM_UPPER_LETTERS 
            && lowerCount <= NUM_LOWER_LETTERS 
            && digitCount <= NUM_DIGITS 
            && minLength <= MIN_LENGTH
            && maxLength <= MAX_LENGTH)
    System.out.println("Password valid and accepted");

字符串

if(upperCount <= NUM_UPPER_LETTERS 
            && lowerCount >= NUM_LOWER_LETTERS 
            && minLength >= MIN_LENGTH
            && maxLength <= MAX_LENGTH)

    System.out.println("Password valid and accepted");


当你希望你的lowerCount和minLength高于最小值,只有maxLength和upperCount低于你的硬限制时。我不确定这个条件,因为你没有提到你需要的最小位数“&& digitCount >= NUM_DIGITS”,但值得考虑。

相关问题