0

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

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) {}}}

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

Exception in thread "main" java.lang.NullPointerException
at SearchingFilesMain.main(SearchingFilesMain.java:31)

此错误发生在这行代码:

if(checker3.equals("Array Size")){

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

有人对为什么会这样有任何想法吗?

4

4 回答 4

6

尽管您已checker3使用空字符串进行了初始化,但它被checker = scan.findWithinHorizon(pattern, 0);which 似乎正在返回的覆盖null

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

if(checker!=null && checker.equals("Array Start")){
   ...
}else{
   ...
}
于 2013-09-10T11:10:37.350 回答
2

scan.findWithinHorizon(pattern, 0)可以回访它null给 你。checker3
equals()NullPointerException

如果您希望忽略此异常,请将您的条件更改为

 if("Array Size".equals(checker3)){
 }

这里的条件是false什么时候checker3不等于,"Array Size"什么时候checker3null,否则是true

于 2013-09-10T11:12:27.623 回答
1
checker3 = scan.findWithinHorizon(pattern2, 300); 

我只能假设上面的代码行正在nullchecker3.

于 2013-09-10T11:14:59.547 回答
1

在你的情况下,checker3 = scan.findWithinHorizon(pattern2, 300);导致它是null

如果checker3未初始化,它将是null,并且在引用的引用变量上调用方法null将导致NullPointerException.

于 2013-09-10T11:10:10.507 回答