验证用户输入
妥善处理无效输入
验证用户输入 是 CoddyKit 上的免费 Java Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
永远不要盲信输入
用户可能输入错误内容:在应该输入数字的地方输入字母、输入空白内容,或输入超出范围的值。可靠的程序会验证输入,并在输入无效时要求用户重新输入,而不是直接崩溃。
本课将介绍使用 Scanner 实现平稳输入验证的模式。
读取前先检查
最简单的保护方式是使用 hasNextInt()。只有实际存在整数时,才读取它。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42");
if (scanner.hasNextInt()) {
System.out.println("Got: " + scanner.nextInt());
} else {
System.out.println("Please enter a number");
}
scanner.close();
}
}循环直到输入有效
重试循环会不断请求输入,直到获得有效整数。如果令牌错误,请使用 next() 将其丢弃,然后继续。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("abc xyz 50");
int value = -1;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
value = scanner.nextInt();
break;
}
scanner.next();
}
System.out.println("Accepted: " + value);
scanner.close();
}
}检查范围
除了类型之外,数值通常还必须处于某个范围内。请先读取数值,然后在接受它之前进行验证。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("7");
int n = scanner.nextInt();
if (n >= 1 && n <= 10) {
System.out.println("Valid: " + n);
} else {
System.out.println("Out of range");
}
scanner.close();
}
}解析时使用 try-catch
另一种方式是先读取整行,再解析它,并捕获无效文本引发的 NumberFormatException。这样可以让缓冲区保持简单。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("notanumber");
String line = scanner.nextLine();
try {
int n = Integer.parseInt(line.trim());
System.out.println("Parsed: " + n);
} catch (NumberFormatException e) {
System.out.println("Invalid number: " + line);
}
scanner.close();
}
}验证非空文本
对于文本输入,请拒绝空白内容。isBlank() 会对空字符串或仅包含空白字符的字符串返回 true。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(" ");
String name = scanner.nextLine();
if (name.isBlank()) {
System.out.println("Name cannot be empty");
} else {
System.out.println("Hello, " + name);
}
scanner.close();
}
}验证选项
对于菜单选项,请先确认该值属于允许的选项之一,然后再对它执行操作。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("y");
String choice = scanner.next().toLowerCase();
if (choice.equals("y") || choice.equals("n")) {
System.out.println("You chose: " + choice);
} else {
System.out.println("Please enter y or n");
}
scanner.close();
}
}可复用的验证器方法
将验证逻辑提取到一个方法中,以便重复使用。这里的方法会检查年龄是否处于合理范围内。
public class Main {
static boolean isValidAge(int age) {
return age >= 0 && age <= 120;
}
public static void main(String[] args) {
System.out.println(isValidAge(30));
System.out.println(isValidAge(-5));
}
}结合类型和范围验证
实际的验证通常会将类型检查、范围检查和重试循环结合到一个可靠的例程中。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("abc 200 45");
int valid = -1;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
int n = scanner.nextInt();
if (n >= 1 && n <= 100) {
valid = n;
break;
}
} else {
scanner.next();
}
}
System.out.println("Final: " + valid);
scanner.close();
}
}清晰的错误消息
良好的验证还应向用户提供有帮助的反馈。请准确说明哪里出错以及应当满足什么要求,而不是只显示笼统的失败提示。
public class Main {
static String validate(String input) {
if (input.isBlank()) return "Input is empty";
if (!input.matches("\\d+")) return "Only digits allowed";
return "OK";
}
public static void main(String[] args) {
System.out.println(validate(""));
System.out.println(validate("12a"));
System.out.println(validate("123"));
}
}验证策略
使用 hasNext 系列方法或 try-catch 检查类型,检查范围和是否为空,循环直到输入有效,并始终清楚地解释错误。
快速检查
测试您对输入验证的理解。
回顾
您已经学会了如何平稳地验证输入:
- 使用
hasNextInt进行保护,或在 try-catch 中进行解析 - 使用重试循环,并通过
next()丢弃错误的令牌 - 检查范围,并使用
isBlank拒绝空白文本 - 提取可复用的验证器方法
- 提供清晰、具体的错误消息
常见问题解答
「验证用户输入」课时是免费的吗?
是的 — 「验证用户输入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「验证用户输入」这节课中我会学到什么?
妥善处理无效输入 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「验证用户输入」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。