为什么我的while循环与system.in.read()无法获得控制台中的最后一行?

时间:2014-06-09 13:03:34

标签: java io console system.in

我遇到了有关System.in.read()的问题。我想打印粘贴到控制台的所有内容。 我的代码如下所示:

import java.io.IOException;

public class printer {
    public static void main(String[ ] args) { 
        int i;
        try {
            while ((i = System.in.read()) != -1) {
                char c = (char)i;
                System.out.print(c);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 问题在于,如果您将三行粘贴到控制台中,程序将打印两行,但不会打印第三行。这是为什么?如果我按下输入但是在第二行和第三行之间有一个巨大的空间,它会打印第三个。

  2. 我还尝试将每个字符串存储在字符串中,然后在循环后打印整个字符串,但循环永远不会结束。是他们停止这个特定循环的方法(我不知道用户将粘贴多少行)

1 个答案:

答案 0 :(得分:1)

您的应用会回显您在控制台中输入(或粘贴)的所有行。问题是,游戏机已成为过去,它们应该逐行完成。这意味着您的应用仅在读取新行字符后打印,因为System.in.read阻止。

您粘贴的文本已包含两个换行符,但最后一行缺少此分隔符。这是您要发布的内容,其中<nl>表示换行符:

    line1<nl>line2<nl>line3

如果你去你的文本编辑器,粘贴到那里,在最后添加一个额外的换行符,然后用&#34;再选择全部&#34;菜单,你会看到最后一行。