Java 测试从输入流读取的缓冲读取器

Java 测试从输入流读取的缓冲读取器,java,intellij-idea,bufferedreader,inputstreamreader,Java,Intellij Idea,Bufferedreader,Inputstreamreader,我在测试代码时遇到问题。我认为问题与使用BufferedReader从InputStreamReader读取有关。 我使用IntelliJ并提供以下输入: Hello World! 为什么我的程序不打印任何东西?这是我的密码: public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)

我在测试代码时遇到问题。我认为问题与使用BufferedReader从InputStreamReader读取有关。 我使用IntelliJ并提供以下输入:

Hello
World!
为什么我的程序不打印任何东西?这是我的密码:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Deque<String> lines = new ArrayDeque<>();
    String line = br.readLine();

    while (line != null) {
        lines.push(line);
        line = br.readLine();
    }

    while (!lines.isEmpty()) {
        System.out.println(lines.pop());
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
Deque lines=新的ARRAYDEFUE();
String line=br.readLine();
while(行!=null){
推(线);
line=br.readLine();
}
而(!lines.isEmpty()){
System.out.println(lines.pop());
}
}

您的代码必须知道您何时完成输入。在Ubuntu上,我必须输入:

Hello
World
然后我按了Strg+D向EOS发送信号。之后我得到了输出:

Hello
World

您将陷入无限循环,因为以下条件的计算结果永远不会为false:

while (line != null) {
  lines.push(line);
  line = br.readLine();
}

你的代码在第一个循环中就发出刺耳的声音

要解决此问题,只需将循环条件修改为下一个:

while (line != null && !line.isEmpty()) {
    lines.push(line);
    line = br.readLine();
}
当你点击回车键时,你的循环就会退出

或者您可以添加任何其他
退出代码
。例如
while(line!=null&&!line.equals(“exit”)
。因此,当您在控制台中输入您的
exit code
exit
,在上面的示例中)您的循环将停止,您将获得所需的输出