提问人:bhavna raghuvanshi 提问时间:6/17/2010 最后编辑:skaffmanbhavna raghuvanshi 更新时间:4/16/2017 访问量:396269
使用 java.util.Scanner [duplicate] 验证输入
Validating input using java.util.Scanner [duplicate]
问:
我正在使用用户输入。我需要验证以下内容的输入:System.in
java.util.Scanner
- 它必须是非负数
- 它必须是按字母顺序排列的字母
- ...等
最好的方法是什么?
答:
方法概述Scanner.hasNextXXX
java.util.Scanner
有许多可用于验证输入的方法。以下是所有这些的简要概述:hasNextXXX
hasNext()
- 它有任何令牌吗?hasNextLine()
- 它有另一行输入吗?- 对于 Java 原语
hasNextInt()
- 它是否有可以解析为的令牌?int
- 此外,还有
hasNextDouble
()、hasNextFloat()、hasNextByte()、hasNextShort()、hasNextLong
() 和hasNextBoolean()
- 作为奖励,还有
NextBigInteger(
) 和hasNextBigDecimal()
- 整数类型还具有用于指定基数的重载(例如十六进制)
- 基于正则表达式
Scanner
能够实现更多功能,因为它是基于正则表达式的。一个重要的功能是 useDelimiter(String pattern),
它允许您定义分隔令牌的模式。还有一些忽略分隔符的 和 方法。find
skip
下面的讨论将使正则表达式尽可能简单,因此重点仍然是 。Scanner
示例 1:验证正整数
下面是一个用于验证输入的正值的简单示例。hasNextInt()
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);
下面是一个示例会话:
请输入正数!
五
这不是一个数字!
-3
请输入正数!
5 谢谢!得到 5
请注意,与更详细的 Integer.parseInt
/NumberFormatException
组合相比,使用起来要容易得多。根据合同,a 保证如果它 ,那么会和平地给你,并且不会抛出任何 //。Scanner.hasNextInt()
try/catch
Scanner
hasNextInt()
nextInt()
int
NumberFormatException
InputMismatchException
NoSuchElementException
相关问题
示例 2:同一令牌上的多个hasNextXXX
请注意,上面的代码片段包含一个语句,用于推进 until it .重要的是要认识到,没有一种方法可以超越任何输入!您会发现,如果您从代码片段中省略这一行,那么它将在无效输入上进入无限循环!sc.next()
Scanner
hasNextInt()
hasNextXXX
Scanner
这会产生两个后果:
- 如果你需要跳过测试失败的“垃圾”输入,那么你需要以一种或另一种方式前进(例如,、、等)。
hasNextXXX
Scanner
next()
nextLine()
skip
- 如果一个测试失败,您仍然可以测试它是否可能!
hasNextXXX
hasNextYYY
下面是执行多个测试的示例。hasNextXXX
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("exit")) {
System.out.println(
sc.hasNextInt() ? "(int) " + sc.nextInt() :
sc.hasNextLong() ? "(long) " + sc.nextLong() :
sc.hasNextDouble() ? "(double) " + sc.nextDouble() :
sc.hasNextBoolean() ? "(boolean) " + sc.nextBoolean() :
"(String) " + sc.next()
);
}
下面是一个示例会话:
5 (int) 5 false (boolean)
false
blah (字符串) blah
1.1 (double) 1.1
100000000000 (long)
1000000000000
exit
请注意,测试的顺序很重要。如果是 ,那么它也是 ,但不一定是相反的。通常情况下,您希望在更一般的测试之前进行更具体的测试。Scanner
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
Scanner
API 链接
hasNext(String pattern)
- 如果下一个标记与从指定字符串构造的模式匹配,则返回。true
java.util.regex.Pattern
相关问题
引用
示例 4:一次使用两个Scanner
有时,您需要逐行扫描,并在一行上使用多个令牌。实现此目的的最简单方法是使用 2 ,其中 second 将 from first 作为输入。下面是一个示例:Scanner
Scanner
nextLine()
Scanner
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);
}
下面是一个示例会话:
给我一堆数字(或“退出”)
3 4 5
总和是 12 10 100 百万美元
总和是
110
等等?
总和为 0
退出
除了 Scanner(String
) 构造函数之外,还有 Scanner(java.io.File)
等。
总结
Scanner
提供了一组丰富的功能,例如验证方法。hasNextXXX
- 正确使用 in 组合意味着 a 永远不会抛出 /。
hasNextXXX/nextXXX
Scanner
InputMismatchException
NoSuchElementException
- 永远记住,这不会推进过去的任何输入。
hasNextXXX
Scanner
- 如有必要,不要害羞地创建多个。两个简单往往比一个过于复杂要好。
Scanner
Scanner
Scanner
- 最后,即使您没有任何使用高级正则表达式功能的计划,也要记住哪些方法是基于正则表达式的,哪些不是。任何接受参数的方法都是基于正则表达式的。
Scanner
String pattern
- 提示:将任何内容转换为文字模式的一种简单方法是
Pattern.quote
它。String
- 提示:将任何内容转换为文字模式的一种简单方法是
评论
如果要从控制台或类似方式解析字符串数据,最好的方法是使用正则表达式。在此处阅读更多相关信息:http://java.sun.com/developer/technicalArticles/releases/1.4regex/
否则,要从字符串中解析 int,请尝试 Integer.parseInt(string)。如果字符串不是数字,则会出现异常。然后,您可以对该值执行检查,以确保它不是负数。
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!");
}
要获取纯字符字符串,最好使用Character.isLetter(char)等方式遍历每个字符来检查数字。
String input
for(int i = 0; i<input.length(); i++)
{
if(!Character.isLetter(input.charAt(i)))
{
System.out.println("This string does not contain only letters!");
break;
}
}
祝你好运!
一个想法:
try {
int i = Integer.parseInt(myString);
if (i < 0) {
// Error, negative input
}
} catch (NumberFormatException e) {
// Error, not a number.
}
在 commons-lang 库中,还有 CharUtils 类,它提供了检查字符是否为数字以及检查字符是否为字母的方法......isAsciiNumeric()
isAsciiAlpha()
要检查字符串中的字母,您可以使用正则表达式,例如:
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);
评论
上一个:验证错误:值无效
下一个:哪些字符会使 URL 无效?
评论
Scanner
Scanner