java - 如何从控制台读取字符串? NoSuchElementException : No line found

标签 java gradle intellij-idea nosuchelementexception

我必须实现接口(interface)终端,它有两种方法。第一种方法只是一个简单的输出,它工作正常。第二种方法的目标是通过控制台读取用户的输入并返回一个拆分(空白)数组。

public class GameTerminal implements Terminal {

    @Override
    //output method

    @Override
    public String[] readInput() {
        Scanner scn = new Scanner(System.in);
        String input = scn.nextLine();
        return input.trim().split("\\s+");
    }

}

此代码引发异常:
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at student.GameTerminal.readInput(GameTerminal.java:20)
    ...
我尝试使用 scn.next()、scn.hasNext()、scn.hasNextLine() 和 BufferedReader 来解决问题,但没有任何效果。我没有第二个扫描仪,也没有使用 scn.close()。
代码在 IntelliJ 中使用 gradle 运行。
有人有解决方案或想法吗?谢谢!

最佳答案

我认为您所要做的就是在调用之间使用相同的 Scanner 来保留状态:

public class GameTerminal implements Terminal {
    private Scanner scn = new Scanner(System.in);
    ...
    public String[] readInput() {
        String input = scn.nextLine();
        return input.trim().split("\\s+");
    }
}
一个简单的驱动程序:
public class Example {
    public static void main(String[] args) throws Exception {
        GameTerminal terminal = new GameTerminal();
        String[] tokens = null;

        while ((tokens = terminal.readInput()) != null) {
            System.out.println(Arrays.toString(tokens));
        }
    }
}
测试运行:
$(/usr/libexec/java_home -v 11)/bin/java Example.java
some tokens
[some, tokens]
some more tokens
[some, more, tokens]

关于java - 如何从控制台读取字符串? NoSuchElementException : No line found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63283226/

相关文章:

java - Gradle项目与Eclipse项目?

gradle - build.gradle中的任务可以取决于插件中的任务吗

java - 配置 gradle.build 将所有 spring boot 子项目构建成 jars

java - 为什么 gradle 不能在 IntelliJ IDEA 的终端窗口中运行?

java - 如何删除 JavaFx TableView 行

java - 映射、分组、值列表

unit-testing - 在 Intellij IDEA 中启动慢速 Grails 测试

java - 在 Glassfish 4 上运行 Spring 3 应用程序

java - 通话/连接到 Android 上的安全元素小程序 micro sd?

java - 为什么这个 GridBagLayout 有未使用的空白空间,我该如何摆脱它?