在Java中,如何检查输入数字然后是字母?

时间:2014-01-09 20:17:39

标签: java input passwords

我的Java程序有点问题。我应该提示用户使用不同的密码模式。我需要格式DDLLDD(D =数字,L =字母),但我不太清楚如何处理这个。

我一直在寻找类似的问题,但我只找到了你应该检查输入是否有任何顺序的数字/字母的问题。我发现了一些正则表达式的东西,但我以前从未使用过那些,我只使用while / for循环检查字符输入。

我试过了,但我不认为我得到了它。我试着检查每个字符索引。

    Scanner s = new Scanner(System.in);
    String input = null;

    // Prompt
    System.out.print("Enter input: ");
    input = s.nextLine();

    // Check length
    while(!(input.length()==6))
    {
        System.out.print("Re-Enter input: ");
        input = s.nextLine();
    }

    boolean inputcheck = false;
    while(inputcheck)
    {
        char ch = input.charAt(0);
        char ch1 = input.charAt(1);
        char ch2 = input.charAt(2);
        char ch3 = input.charAt(3);
        char ch4 = input.charAt(4);
        char ch5 = input.charAt(5);
        boolean check = Character.isDigit(ch);
        boolean check1 = Character.isDigit(ch1);
        boolean check2 = Character.isLetter(ch2);
        boolean check3 = Character.isLetter(ch3);
        boolean check4 = Character.isDigit(ch4);
        boolean check5 = Character.isDigit(ch5);
        if((check==true)&&(check1==true)&&(check2==true)&&(check3==true)&&(check4==true)&&(check5==true));
        {
            inputcheck = true;
        }

    }
    System.out.println("PASS");

2 个答案:

答案 0 :(得分:3)

我不是正则表达式的专业人士,但这可能适合您的需要:

\\d{2}\\D{2}\\d{2}

基本上它意味着:

\d //Any digit, short for [0-9]
{2} //Occurs 2 number of times,
\D //non-digit, short for [^0-9]

 do{
     System.out.print("Input: ");
     input = s.nextLine();
 } while (!input.matches("\\d{2}\\D{2}\\d{2}"));

您可以详细了解正则表达式here

答案 1 :(得分:0)

仔细检查你的逻辑。您显示的代码似乎只“传递”所有数字的密码。具体而言,check2check3可能需要与它们相反,或者通过:

boolean check2 = !Character.isDigit(ch2);

...&&(check2==false)&&...