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*"));
我目前正在尝试制作一个相当基本的 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*"));