我正在寻找一种方法来读取复制并粘贴到IDE或终端/ cmd中的行,这样即使遇到换行符,BufferedReader也会读取所有文本(&# 39; \ n)的。棘手的部分是读者必须知道用户按下了enter(这是换行符),但它必须继续读取输入字符串中的所有字符,直到它到达最后'\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);
}
答案 0 :(得分:0)
好吧,我没有在Stack Overflow上看到这个,所以我想我会问,而且我不知道InputStreamReader是否会起作用......但我猜它确实如此。因此,如果您想阅读包含大量换行符的文本,则必须使用InputStreamReader
。
这是一个类实现Reader
(实现readable
和closeable
并且有一个方法(read(chBuf)
),允许您读取缓冲区字符的输入流(数组),chBuf。我用来测试它的代码如下:
public static void main(String[] args) {
String in = "";
InputStreamReader reader = new InputStreamReader(System.in);
System.out.println("paste text with multiple newline characters below:");
try {
char chs[] = new char[1000];
int n;
while (reader.read(chs) != -1) {
for (int i = 0; i < chs.length; i++) {
char ch = chs[i];
if (ch == '\u0000') {
break;
}
in += chs[i];
}
System.out.println(in);
}
System.out.print(".");
} catch (IOException e) {
System.err.println(e.toString());
}
System.out.println(in);
}
这有点......它将输入的文本打印一次半。
答案 1 :(得分:0)
我可以看到你付出了努力,所以我会告诉你我的意思。当您需要从流中读取时,这是一种非常常见的模式:
char[] buffer = new char[1000];
StringBuilder sb = new StringBuilder();
int count;
// note this loop condition
while((count = reader.read(buffer)) != -1) {
sb.append(buffer, 0, count);
}
String input = sb.toString();