【发布时间】:2014-07-29 23:19:51
【问题描述】:
我正在寻找一种方法来读取复制并粘贴到 IDE 或终端/cmd 中的行,这样 BufferedReader 将读取所有文本,即使它遇到换行符 ('\n) .棘手的部分是读者必须知道用户按下了回车键(这是一个换行符),但它必须继续读取输入字符串中的所有字符,直到到达最后一个'\n'。
有没有办法做到这一点(例如使用 InputStreamReader 或其他东西)?
回答:
public static void main(String[] args) {
InputStreamReader reader = new InputStreamReader(System.in);
StringBuilder sb = new StringBuilder();
int ch;
System.out.println("Paste text below (enter or append to text \"ALT + 1\" to exit):");
try {
while ((ch = reader.read()) != (char)63 /*(char)63 could just be ☺*/) {
sb.append(ch);
}
reader.close();
}catch (IOException e) {
System.err.println(e.toString());
}
String in = sb.toString();
System.out.println(in);
}
【问题讨论】:
-
如果我的粘贴缓冲区中有一百个换行符,然后我按 Enter,我接受哪个换行符作为“最后一个”换行符?
-
不,这是不可能的。
-
这真是令人沮丧。我在想也许我可以告诉用户复制并粘贴到一个文本文件,然后使用 BufferedReader 的 readLine(),但这看起来很奇怪。我可以将文本粘贴到 Netbeans 的终端中,但 BufferedReader 只是不会读到第二行。每个人都确定您不能更改 BufferedReader 的目标字符(这意味着如果它读取特定字符 - 例如默认情况下的 \n - 然后终止读取)?听起来不像,但我只是想确定一下。
-
“一行有多个换行符”用语自相矛盾。
-
如果您要粘贴到终端中,终端可能会将第一个换行符视为输入的结尾,并尝试将其余部分解释为命令。根据 shell,您必须使用类似“here document”之类的东西将整个输入传递给 Java 程序。
标签: java