HOWTO · Java
Java 中的输入验证
本文介绍如何在 Java 中验证输入。
本页内容
验证是根据特定约束检查用户输入或数据库中的值的过程。应用验证以减少程序运行实际业务逻辑以及在用户输入中查找问题所花费的时间。该过程提高了性能,因此在失败的情况下会导致任何进一步的调试会话。
在 Java 代码中,我们使用 Scanner 类获取用户输入。Scanner 类有多种方法可以帮助验证输入内容。
下面是解释这些方法的代码块。
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter any text: ");
while (!scanner.hasNext("quit")) {
System.out.println(scanner.hasNextInt() ? "The Input text is int: " + scanner.nextInt()
: scanner.hasNextLong() ? "The Input text is long: " + scanner.nextLong()
: scanner.hasNextDouble() ? "The Input text is double: " + scanner.nextDouble()
: scanner.hasNextBoolean() ? "The Input text is boolean: " + scanner.nextBoolean()
: "The Input text is String: " + scanner.next());
}
}
}
在上面的代码块中,创建了 Scanner 类的一个实例。使用 new 关键字的构造函数调用采用 Input Stream 参数,例如 System.in。
现在开始对 Scanner 实例进行实际工作。首先,在 while 条件中,应用检查以给出终止条件。该表达式使用 Scanner 类 hasNext 方法。该方法采用与输入标记匹配的模式。并检查输入是否是 quit 文本以外的任何内容。当 Scanner 对象关闭时,hasNext 方法会抛出 IllegalStateException。
现在,当块被启动时,使用 hasNextInt 方法验证输入。只有当输入的文本是 int 值时,它才返回 true。使用 nextInt 方法从控制台将输入文本作为 int 扫描并打印在控制台上。nextInt() 方法在文本与整数正则表达式不匹配时抛出 InputMismatchException,当 Scanner 实例关闭时抛出 IllegalStateException。
现在整个检查块都写在嵌套的三元语句中。如果第一个条件被评估为假,则应用另一项检查。hasNextDouble 方法将文本解释为 double 并在匹配时返回 true。nextDouble() 方法从标准输出返回一个双精度值,并在控制台中打印相同的值,否则为下一次检查而移动。nextDouble() 方法在来自控制台的下一个标记与 Float Regex 不匹配时抛出 InputMismatchException,当 Scanner 实例关闭时抛出 IllegalStateException。
另一项检查是使用 hasNextBoolean 方法。此方法检查 boolean 值,真或假。如果返回值是布尔值 true,则使用 nextBoolean() 来获取控制台输入并将其打印到输出屏幕。否则,它继续使用三元运算符 else 部分。nextBoolean 方法在下一个标记没有找到布尔值时抛出 InputMismatchException,当 Scanner 实例关闭时抛出 IllegalStateException。
遵循相同的模式,使用 next 方法验证输入。该方法成为 while 输入检查部分的最后一个条件。该方法从控制台搜索并返回整个前面的文本。该功能可能会在等待输入扫描时阻止控制台输出。该方法始终返回一个字符串值。评估也将特殊字符视为字符串并在输出中打印。与其他方法一样抛出相同的异常。如果 Scanner 已关闭,则说 IllegalStateException,或者在没有更多令牌可用时说 NoSuchElementException。
下面是上述验证代码的输出块。
Enter any text:
--
The input text is String: --
67
The input text is int: 67
1234567890000000
The input text is long: 1234567890000000
true
The input text is boolean: true
FALSE
The input text is boolean: false
90.08939782639
The input text is double: 90.08939782639
hi
The input text is String: hi
quit