0

所以我正在编写一个 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(" ");

看起来代码正在尝试标记为空的行。但我认为我以一种从不尝试标记空行的方式编写它。谁能帮我吗?

4

2 回答 2

2

将您的 while 循环更改为: -

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

并删除其中的第一行。

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

此外,如果您在阅读后对文件进行标记,我Scanner确实更喜欢使用类。

于 2013-01-17T17:00:10.997 回答
0

问题是这while是一个预检查条件。在循环开始时,line不为空。你应该使用 ado-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);
于 2013-01-17T17:00:50.790 回答