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);
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了吗 在regex中,作为java字符串文本,模式 "[aeiou]" 是所谓的“字符类”;它匹配任何一个字母 a , e , i , o , u . 请注意,使上面的测试不区分大小写很简单:只需向 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);
}
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);
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;
}
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!");
}
6条答案
按热度按时间wribegjk1#
scanner.hasnext方法概述
java.util.Scanner
有很多hasNextXXX
可用于验证输入的方法。以下是所有这些项目的简要概述:hasNext()
-有代币吗?hasNextLine()
-它是否有另一行输入?对于java原语
hasNextInt()
-它是否有可以解析为int
?还提供
hasNextDouble()
,hasNextFloat()
,hasNextByte()
,hasNextShort()
,hasNextLong()
,和hasNextBoolean()
作为奖励,还有hasNextBigInteger()
以及hasNextBigDecimal()
整数类型也有重载来指定基数(例如十六进制)基于正则表达式
hasNext(String pattern)
hasNext(Pattern pattern)
是Pattern.compile
超载Scanner
因为它是基于regex的。一个重要的特点是useDelimiter(String pattern)
,它允许您定义分隔标记的模式。还有find
以及skip
忽略分隔符的方法。下面的讨论将使regex尽可能简单,因此重点仍然是
Scanner
.示例1:验证正整数
下面是一个使用
hasNextInt()
验证阳性int
从输入。下面是一个示例会话:
请输入正数!
五
那不是数字!
-3
请输入正数!
5
谢谢您!有5个
注意要容易得多
Scanner.hasNextInt()
是用来比较冗长的try/catch
Integer.parseInt
/NumberFormatException
联合体。根据合同Scanner
保证如果hasNextInt()
,那么nextInt()
会和平地给你的int
,不会扔任何东西NumberFormatException
/InputMismatchException
/NoSuchElementException
.相关问题
如何使用scanner只接受有效的int作为输入
当输入错误的类型时,如何防止扫描器抛出异常( java 语)
示例2:同一令牌上有多个hasnext
请注意,上面的代码段包含
sc.next()
提前付款声明Scanner
直到它hasNextInt()
. 重要的是要意识到hasNextXXX
方法推进Scanner
没有任何输入!您会发现,如果您从代码段中省略这一行,那么它将进入无效输入的无限循环!这有两个后果:
如果您需要跳过失败的“垃圾”输入
hasNextXXX
测试,然后你需要提前Scanner
以这样或那样的方式(例如。next()
,nextLine()
,skip
等)。如果有
hasNextXXX
测试失败了,你仍然可以测试,如果它可能hasNextYYY
!下面是一个执行多个
hasNextXXX
测验。下面是一个示例会话:
5
(内景)5
假
(布尔值)false
废话
(弦)诸如此类
1.1
(双)1.1
100000000000
(长)10000000000
出口
请注意,测试的顺序很重要。如果
Scanner
hasNextInt()
,然后它也hasNextLong()
,但不一定true
另一方面。通常情况下,您希望在更一般的测试之前进行更具体的测试。例3:验证元音
Scanner
具有正则表达式支持的许多高级功能。下面是一个用它来验证元音的例子。下面是一个示例会话:
请输入元音,小写!
5
那不是元音!
z
那不是元音!
e
谢谢您!找到e了吗
在regex中,作为java字符串文本,模式
"[aeiou]"
是所谓的“字符类”;它匹配任何一个字母a
,e
,i
,o
,u
. 请注意,使上面的测试不区分大小写很简单:只需向Scanner
.api链接
hasNext(String pattern)
-退货true
如果下一个标记与从指定字符串构造的模式匹配。java.util.regex.Pattern
####相关问题在java中读取单个字符
参考文献
java教程/基本类/正则表达式
regular-expressions.info/字符类
例4:同时使用两台扫描仪
有时你需要逐行扫描,一行有多个标记。最简单的方法是使用两个
Scanner
,第二个Scanner
接受nextLine()
从一开始Scanner
作为输入。举个例子:下面是一个示例会话:
给我一行数字(或“退出”)
3 4 5
总数是12
10亿美元
总数是110
等等什么?
总和为0
出口
除了
Scanner(String)
构造函数,还有Scanner(java.io.File)
在其他中。摘要
Scanner
提供了一组丰富的功能,例如hasNextXXX
验证方法。正确使用
hasNextXXX/nextXXX
组合意味着Scanner
永远不会扔垃圾InputMismatchException
/NoSuchElementException
.永远记住这一点
hasNextXXX
不推进Scanner
通过任何输入。不要羞于创建多个
Scanner
如有必要。两个简单的Scanner
往往比一个过于复杂的Scanner
.最后,即使您不打算使用高级regex特性,也要记住哪些方法是基于regex的,哪些不是。任何
Scanner
方法需要String pattern
参数是基于正则表达式的。小贴士:一个简单的方法来扭转任何
String
变成文字模式是Pattern.quote
是的。sqxo8psd2#
一个想法:
在commons lang库中,还有charutils类提供方法
isAsciiNumeric()
检查字符是否为数字,以及isAsciiAlpha()
要检查字符是否为字母。。。epggiuax3#
我尝试的是,首先我接受整数输入,检查它是否为负,如果为负,然后再次接受输入
在这里,您需要首先获取字符输入,并检查用户是否提供了字符,如果没有,则再次获取字符输入
nvbavucw4#
这里有一个最简单的方法。
qni6mghb5#
要检查字符串中的字母,可以使用正则表达式,例如:
为了检查数字和阻止程序崩溃,我有一个非常简单的类,你可以在下面找到,在这里你可以定义你想要的值的范围。在这里
vs3odd8k6#
如果您是从控制台或类似的地方解析字符串数据,最好的方法是使用正则表达式。请在此处阅读更多信息:http://java.sun.com/developer/technicalarticles/releases/1.4regex/
否则,要从字符串解析int,请尝试integer.parseint(string)。如果字符串不是数字,则会出现异常。否则,您可以对该值执行检查,以确保它不是负值。
要获得一个只包含字符的字符串,最好是在每个字符上循环检查数字,例如character.isleter(char)。
祝你好运!