[英]java.util.NoSuchElementException on scanner
我有一个名为input的扫描器,其代码如下:
Scanner input = new Scanner(System.in);
int cFreq = 0;
System.out
.println("Enter the symbol which you want to find the frequency of:");
char s = 'a';
symbolLoop: while (s == 'a') {
try {
s = input.next(".").toLowerCase().charAt(0);
} catch (InputMismatchException e) {
System.out.println("Please enter a valid symbol!");
input.next();
}
switch (checkSymbol(s)) {
case 0:
s = 'a';
break;
case 1:
break symbolLoop;
}
}
for (int i = 0; i < words.size(); i++) {
cFreq += words.get(i).find(s, true);
}
System.out.println("Number of times " + s + " is in the coded words: "
+ cFreq);
}
但是,当它到达从扫描仪读取的行时,它将终止,并显示以下错误:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.next(Scanner.java:1418)
at Home.frequency(Home.java:118)
at Menu.select(Menu.java:58)
at Menu.view(Menu.java:17)
at Home.main(Home.java:22)
(家是班级的名称)。 我不知道是什么原因造成的,不胜感激! :) 谢谢! 编辑:我也尝试使用此代码: String str = input.nextLine();
以相同的方法,但会引发相同的错误。
如果来自用户的数据与"."
不匹配"."
正则表达式(可能被定界符-空格包围) next(".")
不会抛出NoSuchElementException
,而不是InputMismatchException
。
当Scanner甚至不希望有更多数据时,将引发NoSuchElementException
异常,在这种情况下,可以确保可能甚至不存在下一个元素。 这种情况只有在Scanner知道数据源将没有更多元素的情况下才有可能,在Stream的情况下,这是我们将读取流的全部内容(例如在FileInputStream的情况下)或将其关闭的情况。
对于System.in
我们可以假定此流的内容是无限的,因为它是由用户提供的,因此,当我们尝试从中读取内容时,应用程序将等待直到用户提供其数据为止。 这意味着Scanner抛出NoSuchElementException的唯一方法是关闭System.in
时,因此next
没有更多的数据可读取。
为了避免这种情况,您应该避免关闭正在使用System.in
流,因为您将无法在应用程序中再次将其重新打开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.