首页 > 解决方案 > 要求用户在Java循环中重新输入某些字符串时如何仅保留文本打印一次

问题描述

我想要求用户输入字符串类型的数字,然后检查它是否是数字,如果不是,则再次要求重新输入字符串。我有这样的代码:

    System.out.print("Enter first number: ");
    firstNum = scan.next();

    while(validateNum(firstNum) == false) {
        System.out.print("Please, enter number only: ");
        firstNum = scan.next();
    }

这是 validateNum 方法:

    private static boolean validateNum(String num) {
        if (num.matches("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")){
            return true;
        }
        return false;
    }

但问题是,当我测试它并输入一些带空格的文本时,它会打印“请,仅输入一个数字”,与输入字符串中的空格一样多。我试图从字符串中删除空格然后检查它,但它仍然给出了许多打印。

标签: javastringloopsjava.util.scanner

解决方案


您正在使用scan.next(). 这将返回空格之前的内容。您想scan.nextLine()扫描用户输入的整行

这是该类的文档及其Scanner方法。

简而言之:

next():扫描下一个完整的令牌

nextLine():扫描整行


推荐阅读