我正在运行一个循环来接受输入。奇怪的是,当我的缓冲区应该是空的时,我的程序似乎认为我有一个空字符。我写了一个小班来演示。Java输入缓冲区中的空字符持久性?
NullCharTest:
package Scratch;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class NullCharTest {
public void testNullChar() throws IOException{
for (int i = 0; i < 2; i++){
String s = readString();
while (s != null) {
s = readString();
}
System.out.println(s);
}
}
private String readString() throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
return in.readLine();
}
}
主营:
package Scratch;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
NullCharTest nct = new NullCharTest();
nct.testNullChar();
}
}
的输出是一样的东西:
q W¯¯ Ë 空 空 [编辑:输出只是空,nu正如Andreas指出的那样。]]
输入'e'后输入Ctrl + D。
为什么for循环没有在第二次运行时接受输入? s第二次不是空 - 它是一个新的String引用,它被要求引用一个readString()输出...所以大概我的程序应该在for循环的第二次运行时等待用户输入...
谢谢!
为什么没有for循环采取投入运行,第二次? s不是第二次 - 它只是被要求做一个readString(),所以大概它应该等待用户输入...(作为编辑添加到问题中) –
@学习...因为当你按下“Ctrl + D”,您将结束所有输入。你基本上关闭'System.in'。 – Andreas