验证Java输入是一个int并且是一定长度

时间:2014-10-14 21:59:06

标签: java validation loops while-loop

首先,我为我可能做过的任何明显错误的事情道歉。我对Java很陌生,我正尽我所能。

无论如何,我必须编写一个程序来验证加拿大社会保险号是否真实。要启动该程序,我需要能够确保用户的输入具有正确的类型和格式(基本上是9位数字,没有字母,空格,短划线等。只有数字)。我可以使用基本循环来执行验证过程,以及if和else语句,以及切换。

到目前为止,我有:

Scanner kb = new Scanner(System.in);
    String sin;

    System.out.print("Please enter a social insurance number with digits only: ");
    sin = kb.next();


    while (sin.length()!=9){
        System.out.print("Enter a valid social insurance number with digits only: ");
        sin = kb.next();
    }

    for (int i=0; i<sin.length(); i++){
        Character c = sin.charAt(i);
            if (Character.isDigit(c)){
                ???What can I put here???
        }
    }

我认为我必须以某种方式在while语句中包含for循环,以使验证过程正确循环并要求用户以所需格式重新输入输入。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

从您的应用程序流程中分离您的验证逻辑,并根据需要重新检查:

    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);

        System.out.print("Please enter a social insurance number with digits only: ");
        String sin = kb.next();

        // Ask for the user to enter again if entry is not valid
        while (!isValid(sin)) {
            System.out.print("Enter a valid social insurance number with digits only: ");
            sin = kb.next();
        }

        // Move on
    }

    // Check for validity seperately
    public static boolean isValid(String input)
    {
        // Does it have nine characters
        if(input.length() != 9)
            return false;

        // Is it a number ?
        try
        {
            Integer i = Integer.parseInt(input);
        }
        catch(NumberFormatException e)
        {
            return false;
        }

        // Passed all checks must be valid
        return true;
    }