Java 接收空指针异常
我从我编写的一些代码中收到一个空指针异常,我看不出异常的原因。这是我的代码:Java 接收空指针异常,java,if-statement,nullpointerexception,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 chec
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语句并从那里开始,而不是抛出null指针异常并停止程序?我这样想是不是错了
有人知道为什么会这样吗 在您的情况下,checker3=scan.findWithinHorizonPattern2300;使其为空
如果checker3未初始化,则它将为null,并且对引用null的引用变量调用方法将导致NullPointerException。虽然您已使用空字符串初始化checker3,但checker=scan.findWithinHorizonpattern,0;它似乎返回空值 为了避免NullPointerException,您应该在if语句中添加null检查-
if(checker!=null && checker.equals("Array Start")){
...
}else{
...
}
scan.findWithinHorizonpattern,0可能会将null返回到checker3和
对其调用equals会给您带来NullPointerException
如果要忽略此异常,请将条件更改为
if("Array Size".equals(checker3)){
}
这里,当checker3不等于数组大小时,条件为false,当checker3为null时,条件为false,否则为true
我只能假设上面的代码行为checker3分配了一个空值。好的,但是为什么checker3没有初始化呢?它应该在整个while语句之前初始化。它在while循环之前初始化为空字符串,但在while循环中,对findWithinHorizon的调用返回null请使用checker3检查它从checker3=scan获取null值。findWithinHorizon模式2300;好的,谢谢,是的,我意识到它正在返回null,因为这正是它应该返回的,但我看不出它是如何抛出null指针异常的。感谢您的澄清:DArray Start.equalschecker更简洁,因为不需要显式检查null。
checker3 = scan.findWithinHorizon(pattern2, 300);