Java 使用扫描器扫描两次
我正在编写一个读取用户输入的代码,所以我制作了一个过程,可以读取并返回字符串。当从另一个过程调用它两次时,返回一个NoTouchElementException错误,我不知道为什么 输入读取器程序:Java 使用扫描器扫描两次,java,java.util.scanner,nosuchelementexception,Java,Java.util.scanner,Nosuchelementexception,我正在编写一个读取用户输入的代码,所以我制作了一个过程,可以读取并返回字符串。当从另一个过程调用它两次时,返回一个NoTouchElementException错误,我不知道为什么 输入读取器程序: public static String read() { 72 Scanner leer = new Scanner(System.in); 73 String entry = leer.nextLine(); 74 leer.close(); 75 re
public static String read() {
72 Scanner leer = new Scanner(System.in);
73 String entry = leer.nextLine();
74 leer.close();
75 return entry;
}
我如何使用它:
...
System.out.println("input value ");
String padre = Entrada.read();
System.out.println("input values ");
27 String reemplazado = Entrada.read();
...
我要走了
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at modulocarga.Entrada.leerEntradaUsuario(Entrada.java:73)
at modulocarga.TablaSimbolica.addTaxonomica(TablaSimbolica.java:27)
at modulocarga.Principal.main(Principal.java:8)
我第一次打电话的时候还可以,然后就崩溃了。可能是什么?由于只有一个
InputStream使用,因此在第二次调用该方法时,无法再从关闭的输入源读取
不要关闭扫描仪
(或者创建要在应用程序端关闭的扫描仪
的单个类实例)这是因为您的扫描仪链接到System.in,当您关闭扫描仪时,它也会自动关闭System.in。您要做的是只关闭扫描仪而不关闭System.in
这将有帮助:也许您的第一个输入包含行分隔符,但第二个输入不包含行分隔符,并且扫描仪无法正确找到行-因此请参见此处:如果基础流已关闭,然后尝试在该流上读取应该抛出IOException
,而不是NSEEbut然后再次抛出-可能Scanner
会将IOException
包装成NSEE
。删除.close()解决了问题,它会带来其他问题吗?没有必要吗?不,恰恰相反,不要关闭扫描仪
,除非你希望它失败