什么场景会使用 nextLine() 创建 nosuchelementexception?
What scenario would create an nosuchelementexception with nextLine()?
nextLine()
的文档说它可以抛出 nosuchelementexception
。但是当使用 nextLine()
获取扫描仪的输入时,如以下代码所示,不会抛出 nosuchelementexception
,唯一发生的事情是按两次“Enter”,程序就结束了。我将相同的代码提交给在线系统进行评估,系统也说该代码抛出 nosuchelementexception
什么样的输入会产生 nosuchelementexception
?
String input = "";
Scanner sc = new Scanner(System.in);
input += sc.nextLine() + " ";
input += sc.nextLine() + " ";
System.out.println(input);
我觉得读文件的时候可以这样:
我创建了一个新的 txt-file,其中没有任何内容 (test.txt) 和 运行 以下代码:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("test.txt");
Scanner sc = new Scanner(file);
String str = sc.nextLine();
}
}
结果:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Test.main(Test.java:9)
编辑
它也可以与 System.in 一起出现,因为当关闭一台扫描仪时它似乎也关闭了 System.in。
考虑以下代码:
import java.util.Scanner;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);
sc.nextLine();
sc.close();
sc2.nextLine();
}
}
这将引发以下异常:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Test.main(Test.java:10)
发生这种情况是因为 sc
(可以访问 System.in
)已关闭。这导致 System.in
不再可访问,因此 sc2
无法正常工作并抛出异常。
这是一个标准输入(即 System.in
)从另一个应用程序通过管道传输的示例:
echo 'one line only' | java Read
或从文件读取:
java Read <file_with_one_line.txt
或使用交互式用户输入:
java Read
I am entering one line
Ctrl+D
这些示例假定您已将发布的代码(包装在 class Read
中)编译到同一目录中的 Read.class
。
import java.util.Scanner;
class Read {
public static void main(String[] args) {
String input = "";
Scanner sc = new Scanner(System.in);
input += sc.nextLine() + " ";
input += sc.nextLine() + " ";
System.out.println(input);
}
}
javac read.java
nextLine()
的文档说它可以抛出 nosuchelementexception
。但是当使用 nextLine()
获取扫描仪的输入时,如以下代码所示,不会抛出 nosuchelementexception
,唯一发生的事情是按两次“Enter”,程序就结束了。我将相同的代码提交给在线系统进行评估,系统也说该代码抛出 nosuchelementexception
什么样的输入会产生 nosuchelementexception
?
String input = "";
Scanner sc = new Scanner(System.in);
input += sc.nextLine() + " ";
input += sc.nextLine() + " ";
System.out.println(input);
我觉得读文件的时候可以这样:
我创建了一个新的 txt-file,其中没有任何内容 (test.txt) 和 运行 以下代码:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("test.txt");
Scanner sc = new Scanner(file);
String str = sc.nextLine();
}
}
结果:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Test.main(Test.java:9)
编辑
它也可以与 System.in 一起出现,因为当关闭一台扫描仪时它似乎也关闭了 System.in。
考虑以下代码:
import java.util.Scanner;
import java.io.FileNotFoundException;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);
sc.nextLine();
sc.close();
sc2.nextLine();
}
}
这将引发以下异常:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Test.main(Test.java:10)
发生这种情况是因为 sc
(可以访问 System.in
)已关闭。这导致 System.in
不再可访问,因此 sc2
无法正常工作并抛出异常。
这是一个标准输入(即 System.in
)从另一个应用程序通过管道传输的示例:
echo 'one line only' | java Read
或从文件读取:
java Read <file_with_one_line.txt
或使用交互式用户输入:
java Read
I am entering one line Ctrl+D
这些示例假定您已将发布的代码(包装在 class Read
中)编译到同一目录中的 Read.class
。
import java.util.Scanner;
class Read {
public static void main(String[] args) {
String input = "";
Scanner sc = new Scanner(System.in);
input += sc.nextLine() + " ";
input += sc.nextLine() + " ";
System.out.println(input);
}
}
javac read.java