我正在运行循环来接受输入。奇怪的是,当我的缓冲区应该为空时,我的程序似乎认为我有一个空字符。我已经写了一个小班来演示。
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 ^ Ë 空值 空值 [[编辑:输出只是null,null,正如安德烈亚斯所指出的那样。]
输入&#39; e&#39;
后输入Ctrl + D.为什么for循环在第二次运行时没有输入? s不是第二次为空 - 它是一个刚刚被要求引用readString()输出的新字符串引用...所以我的程序可能应该等待用户输入第二轮for循环...
谢谢!
答案 0 :(得分:0)
这段代码毫无意义:
String s = readString();
while (s != null) {
s = readString();
}
当while
循环结束时,s
将为空,因为这是循环正常完成的唯一方法。
然后打印s
的值,即打印值null
。
这是一个for
循环包围,迭代2次,这意味着总是最终打印null
两次。
不输出q w e
,而是输入您输入的输入。输出为null
和null
。在按Ctrl+D
之前,无论您输入什么内容,都要始终。
答案 1 :(得分:0)
修改如下:
String s = readString();
while (s != null) {
System.out.println(s);
s = readString();
}