Java输入缓冲区中的空字符持久性?

时间:2016-03-20 08:11:52

标签: java input

我正在运行循环来接受输入。奇怪的是,当我的缓冲区应该为空时,我的程序似乎认为我有一个空字符。我已经写了一个小班来演示。

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循环...

谢谢!

2 个答案:

答案 0 :(得分:0)

这段代码毫无意义:

String s = readString();
while (s != null) {
    s = readString();
}

while循环结束时,s 为空,因为这是循环正常完成的唯一方法。

然后打印s的值,即打印值null

这是一个for循环包围,迭代2次,这意味着总是最终打印null两次。

不输出q w e,而是输入您输入的输入。输出为nullnull。在按Ctrl+D之前,无论您输入什么内容,都要始终。

答案 1 :(得分:0)

修改如下:

String s = readString();
while (s != null) {
    System.out.println(s);
    s = readString();
}