接收空指针异常

use*_*570 0 java if-statement nullpointerexception

我从我写的一些代码中收到一个空指针异常,我看不出异常的原因.这是我的代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class SearchingFilesMain {

public static void main(String[] arg) {

    int checker4 = 0;
    String checker3 = "";
    String checker2 = "";
    String checker1 = "";
    String checker = "";

    try {
        Scanner scan = new Scanner(new BufferedReader(new FileReader(
                "C:\\Users\\User\\Desktop\\asciiTracks.txt")));

        while (checker != null) {

            String pattern = "Array Start";
            checker = scan.findWithinHorizon(pattern, 0);

            if(checker.equals("Array Start")){

                String pattern2 = "Array Size";
                checker3 = scan.findWithinHorizon(pattern2, 300);
                System.out.println(checker3);

                if(checker3.equals("Array Size")){                      
                    checker4 = Integer.parseInt(scan.findInLine("(10000|\\d{1,4})"));
                    System.out.println(checker4);


                }else{System.out.println("no array size");}
        System.out.println(checker4);
    }else{System.out.println("no array size");}}}catch (FileNotFoundException e) {}}}
Run Code Online (Sandbox Code Playgroud)

这是我在控制台上得到的错误:

Exception in thread "main" java.lang.NullPointerException
at SearchingFilesMain.main(SearchingFilesMain.java:31)
Run Code Online (Sandbox Code Playgroud)

此代码行发生此错误:

if(checker3.equals("Array Size")){
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义,因为如果checker3不等于文本它只会移动到else语句并从那里开始,而不是仅仅抛出空指针异常并停止程序?我错了想到这个吗?

任何人都知道为什么会发生这种情况?

Sub*_*der 6

虽然你已经checker3使用空字符串进行了初始化,但checker = scan.findWithinHorizon(pattern, 0);它似乎已经被重写了null.

为了避免NullPointerException你应该null在你的if声明中添加检查-

if(checker!=null && checker.equals("Array Start")){
   ...
}else{
   ...
}
Run Code Online (Sandbox Code Playgroud)