Java 提示用户输入与特定模式匹配的密码

Java 提示用户输入与特定模式匹配的密码,java,Java,我已经写了一些代码,但我似乎不知道如何获得字符、数字或符号的确切数量。我修正了我的代码一点,但它不工作,我不知道为什么 我的要求是 编写一个Java程序,提示用户输入与特定模式匹配的密码。您的程序必须批准用户的输入。。以下是模式,顺序如下: 我的代码: import java.util.Scanner; public class TestingCenter { public static void main(String[] args) { int digit=0; int s

我已经写了一些代码,但我似乎不知道如何获得字符、数字或符号的确切数量。我修正了我的代码一点,但它不工作,我不知道为什么

我的要求是

编写一个Java程序,提示用户输入与特定模式匹配的密码。您的程序必须批准用户的输入。。以下是模式,顺序如下:

我的代码:

import java.util.Scanner;
public class TestingCenter {

public static void main(String[] args) {
    int digit=0;
    int special=0;
    int upCount=0;
    int upCount2=0;
    int loCount=0;
    String password;
    Scanner scan = new Scanner(System.in);
    System.out.println(" Enter Your Password:");
    password = scan.nextLine();

    for(int i =0;i<password.length();i++){
        char c = password.charAt(i);
        if(Character.isUpperCase(c)){
            upCount++;
    }
        if(Character.isLowerCase(c)){
            loCount++;
    }
        if(Character.isDigit(c)){
            digit++;
    }
        if(Character.isUpperCase(c)){
            upCount2++;
    }
        if(c>=33&&c<=46||c==64){
            special++;
     }
}
        if(special==2&&loCount==2&&upCount>=1&&(digit==1||digit==2)&&upCount2<=1){
        System.out.println(" Password is good:");
    }
}   
}
import java.util.Scanner;
公共类考试中心{
公共静态void main(字符串[]args){
整数位数=0;
int-special=0;
int-upCount=0;
int upCount2=0;
int loCount=0;
字符串密码;
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入密码:”);
密码=scan.nextLine();

对于(int i=0;i=33&&c=1&&(digit==1 | | digit==2)&&upCount2,如果我理解正确,按此顺序字面意思是按给定顺序

如果是这样的话,你需要正则表达式。忘记计数字符

  • 一个或多个大写字母
    [A-Z]+
  • 两个小写字母
    [a-z]{2}
  • 1或2位数字
    \d{1,2}
  • 零个或1个大写字母
    [A-Z]?
  • 此组中的任意两个@#$%^&
    [@#$%^&]{2}
所以


如果这不是你的指令的意思,那么检查一下你的条件。显然不是所有的东西都应该是
=1

指令的哪一部分要求你计算任何东西?“1或2位数”:
digit>=1
真的捕捉到了吗?与“这组中的任何两个@$%^&“两个小写字母”相同“两个或多个小写字母”或“正好两个小写字母”?正好两个小写字母1或多个大写字母…零个或一个大写字母…那么,正好一个?我认为“这组中的任意两个@#$%^&”表示没有指定重复。相同字符中的两个被视为“任意两个”“也许吧,但从说明书上看还不清楚这意味着什么,所以我认为迈克尔需要澄清这一点。
import java.util.Scanner;
public class TestingCenter {

public static void main(String[] args) {
    int digit=0;
    int special=0;
    int upCount=0;
    int upCount2=0;
    int loCount=0;
    String password;
    Scanner scan = new Scanner(System.in);
    System.out.println(" Enter Your Password:");
    password = scan.nextLine();

    for(int i =0;i<password.length();i++){
        char c = password.charAt(i);
        if(Character.isUpperCase(c)){
            upCount++;
    }
        if(Character.isLowerCase(c)){
            loCount++;
    }
        if(Character.isDigit(c)){
            digit++;
    }
        if(Character.isUpperCase(c)){
            upCount2++;
    }
        if(c>=33&&c<=46||c==64){
            special++;
     }
}
        if(special==2&&loCount==2&&upCount>=1&&(digit==1||digit==2)&&upCount2<=1){
        System.out.println(" Password is good:");
    }
}   
}
Scanner scan = new Scanner(System.in);
System.out.println(" Enter Your Password:");
String password = scan.nextLine();
System.out.println(password.matches("[A-Z]+[a-z]{2}\\d{1,2}[A-Z]?[@#$%^&]{2}");