这是我的代码:
public static void main(String[] args) {
String in = "";
InputStreamReader reader = new InputStreamReader(System.in);
int ch;
StringBuilder sb = new StringBuilder();
System.out.println("paste text below:");
try {
while ((ch = reader.read()) != -1 && ch != 0) {
sb.append((char)ch);
}
}catch (IOException e) {
System.err.println(e.toString());
}
}
in = sb.toString();
System.out.println(in);
}
我已经调试过了,它会遍历所有内容并在换行符上打印每个字符,但是在读取最后一个字符后它会一直停止。我已经简单地输入asdfasdf
并复制了独立宣言并粘贴了它。它一直运行到结束,然后停止。
它甚至不像是一个无限循环,因为我在代码的每个部分都放了一个 System.out.print("!@#$%") ,它就停止了……我的代码中没有无限循环。我很确定InputStreamReader
-- reader
-- 卡在它自己的无限循环中,因为它永远不会返回-1。事实上,当它结束时它永远不会返回任何东西(尽管它在循环中返回正确的整数/字符)。
有谁知道发生了什么或者有没有人遇到过类似的问题?有没有办法解决这个问题(不要说 BufferedReader 因为我需要读取带有多个换行符的文本,而 BufferedReader 搜索第一个\n
,所以我不能使用它)?
编辑:
我尝试读取字符缓冲区,然后使用字符串生成器......什么都没有。
回答:
您必须提供一个会打破循环的字符(否则请参阅@default locales 的答案)。
这是我的代码演变成的内容:
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);
}
Alt + 1
返回(至少在 Windows 上)返回笑脸图标,但你可以做任何你想要的组合键,你所要做的就是找出 java 中的 char 并做while ((ch = reader.read()) != (char)charNumber
.