我正在尝试运行此代码。它成功读取文件,但在单词搜索本身中断。
错误:
Exception in thread "main" java.lang.NullPointerException
at WordSearch.main(WordSearch.java:30)
以下是代码:
import javax.swing.JOptionPane;
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
public class WordSearch{
public static void main(String[] args) throws FileNotFoundException{
String searchWord, fileName; int i=0, j=0;
fileName = JOptionPane.showInputDialog(null, "Please enter the name of the file to be processes: ");
File textFile = new File(fileName);
Scanner scanner = new Scanner(textFile);
String[] file = new String[500];
String[] found = new String[500];
while(scanner.hasNextLine()){
file[i]=scanner.next();
i++;
}
file[i+1]="EoA"; i=0;
searchWord = JOptionPane.showInputDialog(null, "Please input the string to search for: ");
while(!file[i].equals("EoA")){
if (file[i].equals(searchWord)){
if(i==0){
found[j]=file[i]+file[i+1]+"\n";
}
else if(i==500){
found[j]=file[i-1]+file[i]+"\n";
}
else {
found[j]=file[i-1]+file[i]+file[i+1]+"\n";
}
j++;
}
i++;
}
JOptionPane.showMessageDialog(null, found);
}
}
答案 0 :(得分:2)
更改
file[i+1]="EoA";
到
file[i]="EoA";
否则,您将在“EoA”条目之前的位置有一个空条目,这会导致NullPointerException
。
当然,您可以摆脱“EoA”条目,只需将循环条件更改为:
while (file[i] != null)
这更具可读性。
最后一件事,您如何保证您的输入不会超过数组的500长度?
答案 1 :(得分:0)
由于您的 i ++ 表达式,这种情况正在发生。在每次迭代中, i 正在递增,结果将存储在由 i
的值指向的先前索引中可能的解决方案是在 while 循环中使用i-1
。