Java 检查输入是整数还是空值以允许使用默认值

Java check input is integer or empty to allow for default value

我目前正在尝试制作一个相当基本的 java 程序,要求用户输入,如果他们按回车键以提供默认值。

目前我的代码是

System.out.println("Please enter a port number (default 8080): ")
port = scanner.nextLine();
      if (port.isEmpty() || port.equals("8080")) {
          port = "8080";
          System.out.println("Using default port...");
      }
      else {
          System.out.println("Using new port...");
      }

我想改变这个来检查输入(如果有的话)是一个整数,如果不是,循环回来再次请求输入。我知道它需要使用 hasNextInt 和 nextLine 的组合,但我无法弄清楚。

如有任何帮助,我们将不胜感激。

与其乱搞 nextInt(),不如尝试将输入解析为整数,并在失败时处理异常

Scanner scanner = new Scanner(System.in);
System.out.println("Please enter a port number (default 8080): ");
String port = null;
while (true) {
    port = scanner.nextLine();
    if (port.isEmpty() || port.equals("8080")) {
        port = "8080";
        break;
    } else {
        try {
            Integer.valueOf(port);
            break;
        } catch (NumberFormatException ex) {
            System.out.println("Incorrect value given, try again");
        }
    }
}
System.out.println("You have selected " + port);
scanner.close();

这是一种选择。您只需要求用户几次输入默认值,如果他们多次失败,您 return 默认端口。如果他们提供的输入不是整数,则会抛出 InputMismatchException 并且我们告诉他们输入不正确,然后我们要么再次尝试,要么 return 默认。

值得注意的是,我们调用 Scanner#next() 来清除底层缓存以删除任何现有数据。

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int port = askForPortOr(scanner, 8080, 0, 3);

        System.out.println("port: " + port);
    }

    private static int askForPortOr(Scanner scanner, int defaultPort, int attempts, int maximumAttempts) {
        try {
            System.out.println("Please enter a port number (default 8080): ");
            return scanner.nextInt();
        } catch (InputMismatchException ime) {
            scanner.next();

            if (++attempts < maximumAttempts) {
                System.out.println("Incorrect port, please try again...");
                return askForPortOr(scanner, defaultPort, attempts, maximumAttempts);
            }
            return defaultPort;
        }
    }

输出

Please enter a port number (default 8080): 
808o
Incorrect port, please try again...
Please enter a port number (default 8080): 
808o
Incorrect port, please try again...
Please enter a port number (default 8080): 
808o
port: 8080

您可以简单地使用 java 正则表达式

if (port.matches("\d+")) {
  System.out.println("it's a natural number (positive integer)");
}

试试这个

String port;
     Scanner scanner = new Scanner(System.in);
     do {
     System.out.println("Please enter a port number (default 8080): ");
     port = scanner.nextLine();
           if (port.isEmpty() || port.equals("8080")) {
               port = "8080";
               System.out.println("Using default port...");
           }     
 }while(!port.matches("\d*"));