我从我写过的一些代码中收到一个空指针异常,我看不出异常的原因。这是我的代码:
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语句并从那里开始,而不是仅仅抛出空指针异常并停止程序?我错了想到这个吗?
任何人都知道为什么会发生这种情况?
答案 0 :(得分:6)
虽然您已使用空字符串初始化checker3
,但它被checker = scan.findWithinHorizon(pattern, 0);
覆盖,似乎正在返回null
。
为了避免NullPointerException
,您应该在null
声明中添加if
-
if(checker!=null && checker.equals("Array Start")){
...
}else{
...
}
答案 1 :(得分:2)
scan.findWithinHorizon(pattern, 0)
可能会将null
返回checker3
和
在其上调用equals()
会为您提供NullPointerException
。
如果您想忽略此异常,请将条件更改为
if("Array Size".equals(checker3)){
}
此处条件为false
checker3
不等于"Array Size"
且checker3
为null
,否则为true
答案 2 :(得分:1)
在您的情况下,checker3 = scan.findWithinHorizon(pattern2, 300);
会导致null
如果checker3
未被初始化,则为null
,并且在引用null
的引用变量上调用方法将导致NullPointerException
。
答案 3 :(得分:1)
checker3 = scan.findWithinHorizon(pattern2, 300);
我只能假设上面一行代码将null
值分配给checker3
。