如何检查 java 扫描仪中的空输入

How to check for empty inputs in java scanner

经过一番挖掘,我未能找到令人满意的方法来在 do-while 循环中实现条件,以便扫描器忽略空输入。

尝试的代码:

String name = "";
boolean flag_name= false;
do{
    System.out.print("Name: ");
    if(scanner.hasNextInt()){
        int number = scanner.nextInt();
        scanner.nextLine();
        System.out.printf("\"%s\" is not a valid name...\n", number);
    }else{
        name = scanner.nextLine();
        if(!name.equals("")){
            if(name.length() <= 2){
                System.out.println("The name is too short (min: 3)...");
            }else if(name.length >= 20){
                System.out.println("The name is too long (max: 20)...");
            }else{
                flag_name = true;
            }
        }
    }
}while(!flag_name);

预期输出:

Name: 
Name:
Name:
Name:
Name:
Name: willy
Age: 

实际输出:

Name: 




willy
Name: Name: Name: Name: Name: Age: 

我会说你的逻辑有问题。不要像这样循环,考虑将你的方法分解成多个函数。

我写个算法

static boolean isValidName(String input) {
    /*
     * enter code here
    */
    return true for valid
}
    public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    String name = "";
    do {
        System.out.print("Name: ");
        name = scanner.nextLine();
        if (isValidName(name)) {
            break;
        }
    } while (true);
    System.out.println(name);
}

hasNextInt 不是检查用户是否输入数字的最佳方法。您必须更彻底地考虑验证。

最后想出了以下解决方案:

// Regex validation of number
public static boolean isNumeric(String str){
    return str.matches("-?\d+(\.\d+)?");
}

// Validation of the string input with custom error messages.
public static boolean isValidName(String name){
    if(Utils.isNumeric(name)){
        System.out.printf("\"%s\" Is not a valid name.\n\n", name);
    }else{
        if(name.length() < 3){
            System.out.printf("\"%s\" Too short... (min 3)\n\n", name);
        }else if(name.length() > 20){
            System.out.printf("\"%s\" Too long... (max 20)\n\n", name);
        }else{
            return true;
        }
    }
    return false;
}

// Ask for input code block
String name;
do{
    System.out.print("Name: ");
    name = scanner.nextLine();
    if(!name.isEmpty()){
        if(Utils.isValidName(name)){
            break;
        }
    }
}while(true);
  1. 将我的输入保存在变量中并从那里进行验证。
  2. 实现了一个正则表达式方法,不仅可以检查整数,还可以检查任何类型的数字。
  3. 在另一种方法上将实际输入的验证与自定义错误消息分开。
  4. .isEmpty() 丢弃空输入的方法(原题)。