有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java密码搜索字符

我必须创建一个程序,创建一个有效的密码,这个密码的要求是:必须有5到8个字符,必须包含一个数字,一个大写字母和一个小写字母。它也必须是一个类和一个测试程序的形式,但现在我只是想让程序正常工作。现在,长度检查和大写检查都很好,但数字检查给我带来了问题。每次我输入一个数字,密码都是无效的。这是我到目前为止得到的

import java.util.Scanner;

public class pass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String password;
        int length;
        boolean hasUppercase;
        boolean hasLowercase;
        boolean hasNum;

        do {
            System.out.println("Password must be between 5 and 8 characters 
            and must contain a lowercase letter, an uppercase letter, and a 
            number");
            System.out.println("Please enter your password: ");
            password = sc.next();
            length = password.length();
            hasUppercase = !password.equals(password.toLowerCase());
            hasLowercase = !password.equals(password.toUpperCase());
            hasNum = !password.matches(".*\\d+.*");


            if(length >= 5 & length <= 8 ) {
                if(hasUppercase & hasLowercase & hasNum) {
                    System.out.print("Your password has been set");

                }
            }
            else {
                System.out.print("Password must be between 5 and 8 
                characters and must contain a lowercase letter, an uppercase 
                letter, and a number");
            }

        }
        while(length <= 5 | length >= 8 | !hasUppercase | !hasLowercase | 
!hasNum);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    hasNum = !password.matches(".*\\d+.*");表示“如果字符串不包含数字,则hasNum=true”-只需删除!

    我还简化了结束条件——一个布尔“passwordOk”,而不是再次检查所有5个条件

  2. # 2 楼答案

    编辑了你的程序。内联记录的更改

    public class pass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String password;
        int length;
        boolean hasUppercase;
        boolean hasLowercase;
        boolean hasNum;
    
        do {
            System.out.println("Password must be between 5 and 8 characters and must contain a lowercase letter, an uppercase letter, and a number");
            System.out.println("Please enter your password: ");
            password = sc.next();
            length = password.length();
            hasUppercase = !password.equals(password.toLowerCase());
            hasLowercase = !password.equals(password.toUpperCase());
            hasNum = !password.matches(".*\\\\d+.*");
    
            if(length >= 5 & length <= 8 ) {
                if(hasUppercase & hasLowercase & hasNum) {
                    System.out.print("Your password has been set");
    
                }
            }
            else {
                System.out.print("Password must be between 5 and 8  characters and must contain a lowercase letter, an uppercase letter, and a number");
            }
    
        }
        while(length < 5 | length > 8 | !hasUppercase | !hasLowercase | !hasNum); //Removed >= and <= for length checks
    }
    

    }

  3. # 3 楼答案

    您可以让您的生活更轻松,只需使用正则表达式即可:

    String password = "Hello123";
    if (password.matches("(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).{5,8}")) {
        System.out.println("Password is valid");
    }
    else {
        System.out.println("Password is invalid.");
    }
    

    Demo