【发布时间】: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;
}
我已经看过以下网站,但它们都没有帮助:
- How to read input with multiple lines in Java
- https://www.techiedelight.com/read-multi-line-input-console-java/
- Make the console wait for a user input to close
编辑:
同样的错误适用于:
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
”以退出或类似的内容。在您的代码中,您可以检查该行是否与标记匹配,如果匹配则退出。