Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓冲读取器的标记化问题_Java_Nullpointerexception_Bufferedreader - Fatal编程技术网

Java 缓冲读取器的标记化问题

Java 缓冲读取器的标记化问题,java,nullpointerexception,bufferedreader,Java,Nullpointerexception,Bufferedreader,因此,我正在编写一个java程序,该程序应该一直分析用户的字符串,直到标准输入结束(直到他们按下CTRL+D或输入文件结束)。程序按预期工作,但是当我按CTRL+D时,出现空指针异常。以下是相关代码: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = " "; while (line != null) { line = in

因此,我正在编写一个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(“”)


看起来代码试图标记一个空的行。但我认为我写它的方式永远不会试图标记空行。有人能帮我吗?

将while循环更改为:-

while ((line = in.readLine())!= null) {
并移除其中的第一行

请注意,您正在读取循环中的行,然后稍后进行测试。因此,您将在文件末尾获得一个
NPE


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

问题在于
是预检查条件。在循环的开头,
不是空的。您应该改用
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);

谢谢你!在发布此消息几秒钟后,我意识到我的错误haha@user1718698.. 没问题。:)