使用java.util.Scanner验证输入
我使用使用java.util.Scanner验证输入,java,validation,java.util.scanner,Java,Validation,Java.util.scanner,我使用java.util.Scanner从System.in中获取用户输入。我需要验证输入,例如: 它必须是一个非负数 它一定是按字母顺序排列的 。。。等 最好的方法是什么?扫描器概述。hasNextXXX方法 有许多可用于验证输入的方法。以下是所有这些项目的简要概述: -它有代币吗 -是否有其他输入行 对于Java原语 -它是否有可解析为int的令牌 还有、、和 作为奖励,还有和 整数类型还具有指定基数的重载(例如十六进制) 基于正则表达式的 超载了吗 Scanner能够实现
java.util.Scanner
从System.in
中获取用户输入。我需要验证输入,例如:
- 它必须是一个非负数
- 它一定是按字母顺序排列的
- 。。。等
- -它有代币吗
- -是否有其他输入行
- 对于Java原语
- -它是否有可解析为
的令牌int
- 还有、、和
- 作为奖励,还有和
- 整数类型还具有指定基数的重载(例如十六进制)
- -它是否有可解析为
- 基于正则表达式的
- 超载了吗
Scanner
能够实现更多功能,因为它基于regex。一个重要的特性是,它允许您定义分隔令牌的模式。还有忽略分隔符的find
和skip
方法
下面的讨论将使正则表达式尽可能简单,因此重点仍然是Scanner
示例1:验证正整数 下面是一个使用
hasnetint()
验证输入的正int
的简单示例
Scanner sc = new Scanner(System.in);
int number;
do {
System.out.println("Please enter a positive number!");
while (!sc.hasNextInt()) {
System.out.println("That's not a number!");
sc.next(); // this is important!
}
number = sc.nextInt();
} while (number <= 0);
System.out.println("Thank you! Got " + number);
下面是一个示例会话:
5(int)5
假
(布尔值)false
废话
(字符串)废话 1.1
(双)1.1
10000000000
(长)10000000000
出口 请注意,测试的顺序很重要。如果一个
扫描器hasNextInt()
,那么它也hasNextLong()
,但不一定是true
。通常情况下,您希望在更一般的测试之前进行更具体的测试
例3:验证元音
Scanner
具有正则表达式支持的许多高级功能。下面是一个使用它验证元音的示例
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a vowel, lowercase!");
while (!sc.hasNext("[aeiou]")) {
System.out.println("That's not a vowel!");
sc.next();
}
String vowel = sc.next();
System.out.println("Thank you! Got " + vowel);
下面是一个示例会话:
请输入一个元音,小写
5
那不是元音
z
那不是元音
e
谢谢!获得e 在正则表达式中,作为Java字符串文本,模式
“[aeiou]”
就是所谓的“字符类”;它匹配任何字母a
,e
,i
,o
,u
。注意,使上面的测试不区分大小写很简单:只需向扫描器提供这样的正则表达式模式即可
API链接
- -如果下一个标记与从指定字符串构造的模式匹配,则返回
true
相关问题
工具书类
示例4:同时使用两个扫描仪
有时您需要逐行扫描,一行上有多个令牌。实现这一点的最简单方法是使用两个扫描仪
,其中第二个扫描仪
从第一个扫描仪
获取nextLine()
作为输入。下面是一个例子:
Scanner sc = new Scanner(System.in);
System.out.println("Give me a bunch of numbers in a line (or 'exit')");
while (!sc.hasNext("exit")) {
Scanner lineSc = new Scanner(sc.nextLine());
int sum = 0;
while (lineSc.hasNextInt()) {
sum += lineSc.nextInt();
}
System.out.println("Sum is " + sum);
}
下面是一个示例会话:
给我一行数字(或“退出”)
34.5
总和为12
10 100万美元
总和为110
等等什么?
总和为0
出口
除了构造器,还有其他的
总结
Scanner
提供了一组丰富的功能,例如用于验证的hasNextXXX
方法
- 正确组合使用
hasNextXXX/nextXXX
意味着扫描仪将永远不会抛出输入不匹配异常
/无接触异常
- 始终记住,
hasNextXXX
不会使扫描仪
超过任何输入
- 如有必要,不要羞于创建多个
扫描仪。两个简单的扫描仪
通常比一个过于复杂的扫描仪
要好
- 最后,即使您没有任何使用高级正则表达式功能的计划,也要记住哪些方法是基于正则表达式的,哪些不是。任何采用
字符串模式
参数的扫描器
方法都是基于正则表达式的。
- 提示:将任何
字符串
转换为文字模式的一种简单方法是使用它
如果您正在从控制台或类似工具解析字符串数据,最好的方法是使用正则表达式。请在此处阅读更多相关信息:
否则,要从字符串中解析int,请尝试
. 如果字符串不是数字,则会出现异常。否则,您可以对该值执行检查,以确保它不是负值
String input;
int number;
try
{
number = Integer.parseInt(input);
if(number > 0)
{
System.out.println("You positive number is " + number);
}
} catch (NumberFormatException ex)
{
System.out.println("That is not a positive number!");
}
要获得一个只包含字符的字符串,您可能最好在每个字符上循环检查数字,例如使用
字符串输入
对于(inti=0;i一个想法:
try {
int i = Integer.parseInt(myString);
if (i < 0) {
// Error, negative input
}
} catch (NumberFormatException e) {
// Error, not a number.
}
试试看{
inti=Integer.parseInt(myString);
if(i<0){
//错误,负输入
}
}捕获(数字格式){
//错误,不是数字。
}
库中还有一个类,它提供了检查字符是否为数字的方法isAsciiNumeric()
,以及检查字符是否为字母的方法isAsciiAlpha()
。要检查字母字符串,可以使用正则表达式,例如:
someString.matches("[A-F]");
为了检查数字和停止程序崩溃,我有一个非常简单的类,你可以在下面找到,在这里你可以定义你想要的值的范围。
public int readInt(St
try {
int i = Integer.parseInt(myString);
if (i < 0) {
// Error, negative input
}
} catch (NumberFormatException e) {
// Error, not a number.
}
someString.matches("[A-F]");
public int readInt(String prompt, int min, int max)
{
Scanner scan = new Scanner(System.in);
int number = 0;
//Run once and loop until the input is within the specified range.
do
{
//Print users message.
System.out.printf("\n%s > ", prompt);
//Prevent string input crashing the program.
while (!scan.hasNextInt())
{
System.out.printf("Input doesn't match specifications. Try again.");
System.out.printf("\n%s > ", prompt);
scan.next();
}
//Set the number.
number = scan.nextInt();
//If the number is outside range print an error message.
if (number < min || number > max)
System.out.printf("Input doesn't match specifications. Try again.");
} while (number < min || number > max);
return number;
}
System.out.print("Please enter an integer: ");
while(!scan.hasNextInt()) scan.next();
int demoInt = scan.nextInt();
Scanner s=new Scanner(System.in);
int a=s.nextInt();
while(a<0)
{
System.out.println("please provide non negative integer input ");
a=s.nextInt();
}
System.out.println("the non negative integer input is "+a);
char ch = s.findInLine(".").charAt(0);
while(!Charcter.isLetter(ch))
{
System.out.println("please provide a character input ");
ch=s.findInLine(".").charAt(0);
}
System.out.println("the character input is "+ch);