Java 使用扫描器扫描两次

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

我正在编写一个读取用户输入的代码,所以我制作了一个过程,可以读取并返回字符串。当从另一个过程调用它两次时,返回一个NoTouchElementException错误,我不知道为什么

输入读取器程序:

    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()解决了问题,它会带来其他问题吗?没有必要吗?不,恰恰相反,不要关闭
扫描仪
,除非你希望它失败