使用缓冲读取器进行标记问题

时间:2013-01-17 16:58:23

标签: java nullpointerexception bufferedreader

所以我正在编写一个java程序,该程序应该继续分析用户的字符串,直到标准输入结束(直到他们按下CTRL + D或输入文件的结尾)。该程序按预期工作,但是当我按CTRL + D时,有一个空指针异常。以下是有问题的代码:

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String line = " ";
    while (line != null) {
        line = in.readLine();
        String[] tokens = line.split(" ");
        System.out.println(line); ......

空指针的目标是 String [] tokens = line.split("");

看起来代码试图将一行为空标记。但我以为我写的方式永远不会尝试标记空行。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

将您的while循环更改为: -

while ((line = in.readLine())!= null) {

删除其中的第一行。

请注意,您正在读取循环内部的行,然后再进行测试。所以,你会在文件的末尾找到NPE

另外,如果您在阅读后对文件进行标记,我宁愿使用Scanner类。

答案 1 :(得分:0)

问题是while是预检条件。在循环开始时,line不为空。您应该使用do-while代替。

while (line != null) {
    line = in.readLine(); // in the loop, but in.readLine() returns null
    String[] tokens = line.split(" "); // OH SHI- LINE IS NULL
    System.out.println(line);