【问题标题】:In Java, how can I check input for a digit then letter?在Java中,如何检查输入的数字和字母?
【发布时间】:2014-01-09 20:17:38
【问题描述】:

我的 Java 程序有一点问题。我应该提示用户输入不同的密码模式。我需要格式 DDLLDD (D=digit, L=letter) 但我不太确定如何处理。

我一直在寻找类似的问题,但我只找到了你应该检查输入是否有任何顺序的数字/字母的问题。我也发现了一些正则表达式的东西,但我以前从未使用过这些东西,我只使用了 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");

【问题讨论】:

  • "digit" 和 "number" 是同义词;你打错字了吗?你的模式中的“L”实际上是指“字母”吗?
  • 啊,是的,我很抱歉。我会尝试编辑它。

标签: java input passwords


【解决方案1】:

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

\\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

【讨论】:

  • 哦,正则表达式,甚至没有想到这一点。不错。
  • 非常感谢,我会试试看的。
  • 代码终于可以工作了。谢谢,这比我做的要简单得多。
【解决方案2】:

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

boolean check2 = !Character.isDigit(ch2);

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

【讨论】:

  • 似乎我为此复制了错误的部分。我的意思是 check2 和 3 是 isLetter
猜你喜欢
  • 2014-08-20
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2013-08-05
  • 2012-12-30
  • 2018-06-19
相关资源
最近更新 更多