我正在学习Java来自其他编程语言(Js,C和其他...)
我想知道在任何情况下Scanner.next()
方法是否可以返回(不抛出)无效字符串或少于一个字符(即null
或空字符串""
)。我习惯于仔细检查用户输入是否存在任何意外/无效值,但我想知道null
和myString.length() < 1
的测试是否总是不必要或者是否有用/需要。
我特别要求从命令行和System.in
读取,而不是从其他文件流中读取。从终端输入正常读取时,我可以安全地从返回值中获取myString.charAt(0)
的第一个字符(即没有管道,没有文件,直接从终端和键盘)?
我搜索了Java SE 9 API文档,但未找到有关可能意外返回值的提及。如果输入有任何问题,它应该抛出异常,对吗?
示例(没有导入的主要方法的一部分):
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a selection (from A to E): ");
String res = keyboard.next();
if (res == null || res.length() < 1) {
// Unnecessary if?
}
Scanner#next
永远不会返回null,如果用户只输入空字符串或包含空格的字符串,则该方法将阻塞并等待输入进行扫描。
因此,if
条件是多余的,根本不需要。
通过查看源代码,Scanner.next
永远不会返回null。来自Scanner.next代码
while(true){
...
if (token != null) {
matchValid = true;
skipped = false;
return token;
}
...
}
如果没有更多的令牌,它可以抛出NoSuchElementException
,如果根据文档关闭扫描仪,它可以抛出IllegalStateException
。所以你的支票是多余的。