【问题标题】:Trying to read multiple lines of cmd input尝试读取多行 cmd 输入
【发布时间】:2022-01-18 15:20:19
【问题描述】:

我正在尝试编写一个方法:

  • 打印出一条消息(类似于:“粘贴您的输入:”)
  • 等待用户按下回车键。
  • 读取所有粘贴的行并将它们加到一个字符串中。

(可以用空行来判断输入的结束。)

第一个 syso 执行打印部分,第一行也被正确读取,但它永远不会退出 while 循环。为什么?总得有个结局吧?

public static String readInput(String msg) {
    System.out.print(msg);
    String res = "";
    try (BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in))) {
        String line;
        while ((line = buffer.readLine()) != null && !line.isBlank())
            res += "\n" + line;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return res;
}

我已经看过以下网站,但它们都没有帮助:

编辑:

同样的错误适用于:

public static String readInput(String msg) {
        System.out.print(msg);
        String res = "";
        try (BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in))) {
            res = buffer.lines().reduce("", (r, l) -> r + "\n" + l);
            System.out.println(res);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }

编辑 2: 我已经在我的实际项目和一个新的测试项目中尝试过这段代码,但结果不同。 Here 是该测试的视频。

【问题讨论】:

  • 没有办法知道用户是否完成了复制——我建议在结尾处使用标记。例如,用户可以复制这些行,然后输入“q ”以退出或类似的内容。在您的代码中,您可以检查该行是否与标记匹配,如果匹配则退出。

标签: java input console


【解决方案1】:

为什么不用这个语句?

 while (!(line = buffer.readLine()).isEmpty())

在这种情况下发送空行将退出循环。

但是,如果您插入带有空行的大文本(例如,新段落的开头或它们之间的空格)将终止程序。

【讨论】:

  • 我已经尝试过了,但它不适用于 isEmpty 或 isBlank。老实说,我不知道为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多