2017-06-18 42 views
0

我已经写了一些代码,但我似乎无法弄清楚如何获取字符,数字或符号的确切数量。我固定了我的代码,但它不起作用,我不知道为什么。提示用户输入与特定模式匹配的密码

我的要求是

写,提示用户输入匹配特定模式的密码的Java程序。你的程序必须批准该用户的条目。这里是模式,顺序如下:

-1 or more upper case letters 
-two lower case letters 
-1 or 2 digits 
-zero or 1 upper case letters 
-any two of this group @#$%^& 

我的代码:

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:"); 
    } 
} 
} 
+0

哪部分指示要求你计算什么? –

+0

“1或2位数字”:“数字> = 1”是否真的捕获了? “这个小组中的任何两个@ @ $%^&” – Henry

+0

“两个小写字母”应该是“两个或多个小写字母”还是“正好两个小写字母”? –

回答

1

如果我理解正确的话,顺序字面意思是给定的顺序。

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

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

所以,

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}"); 

如果这不符合您的指示,请检查您的条件。显然不是所有的东西都应该是>= 1

+2

我会认为“这个组@@ $%^&中的任何两个都意味着没有重复” –

+1

重复不是指定。两个相同的字符被认为是“任意两个” –

+0

也许,但从规范中不清楚它的含义,所以我认为迈克尔需要澄清这一点。 –

相关问题