1

我遇到了关于 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. 我还尝试将每个字符存储在一个字符串中,然后在循环之后打印整个字符串,但循环永远不会结束。他们是停止这个特定循环的一种方法吗(我不知道用户将粘贴多少行)

4

1 回答 1

1

您的应用程序会回显您在控制台中键入(或粘贴)的任何行。问题是,控制台已成为过去,它们应该逐行执行。这意味着您的应用程序仅在读取换行符后才打印,因为System.in.read阻塞。

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

    line1<nl>line2<nl>line3

如果你去你最喜欢的文本编辑器,粘贴到那里,在末尾添加一个额外的换行符,然后使用“全选”菜单再次复制所有内容,你会看到最后一行。

于 2014-06-09T13:52:45.183 回答