*以下代码从文本文件中的字符串构建“2D”array
。目前它在行上返回NullPointException
错误:
temp = thisLine.split(delimiter); 我的问题是,我是否理解
temp
正在返回null
?如果是,为什么,以及如何为null
添加支票?我是Java的新手,这是我第一次尝试从文件创建array
字符串arrays
。*
-------- --------编辑
上述问题已经解决。
对于下面感兴趣的人,返回IndexOutOfBoundsException.
的代码特别是行:
fileContents.set(i,fileContents.get(i).replace(hexLibrary [i] [0],hexLibrary [i] [1]));
System.out.println("SnR after this");
String[][] hexLibrary; // calls the replaces array from the LibToArray method
hexLibrary = LibToArray();
for(int i=0;i<502;i++){
{
fileContents.set(i, fileContents.get(i).replace(hexLibrary[i][0], hexLibrary[i][1]));
}
}
for (String row : fileContents) {
System.out.println(row); // print array to cmd
}
_ __ _ __ _ __ _ __ _ 的__ _ __ _ __ _ __ _ __ _ __
public static String[][] LibToArray()
{
String thisLine;
String[] temp;
String delimiter=",";
String [][] hexLibrary = new String[502][2];
try
{
BufferedReader br= new BufferedReader(new FileReader("hexlibrary.txt"));
for (int j=0; j<502; j++) {
thisLine=br.readLine();
temp = thisLine.split(delimiter);
for (int i = 0; i < 2; i++) {
hexLibrary[j][i]=temp[i];
}
}
}
catch (IOException ex) { // E.H. for try
JOptionPane.showMessageDialog(null, "File not found. Check name and directory."); // error message
}
return hexLibrary;
}
答案 0 :(得分:1)
thisLine
更有可能是null
。如果在读取502行之前用完输入,就会发生这种情况。如果thisLine
不是null
,则thisLine.split(delimiter)
将不会返回null
。您应该始终检查null
行:
for (int j=0; j<502; j++) {
thisLine=br.readLine();
if (thisLine != null) {
temp = thisLine.split(delimiter);
for (int i = 0; i < 2; i++) {
hexLibrary[j][i]=temp[i];
}
} else {
// report error: premature end of input file
break; // no point in continuing to loop
}
}
就个人而言,我会写你的方法不假设任何特定的文件长度:
public static String[][] LibToArray() {
List<String[]> lines = new ArrayList<>();
String delimiter=",";
try (BufferedReader br= new BufferedReader(new FileReader("hexlibrary.txt"))) {
String line = br.readLine();
while (line != null) {
String[] tmp = line.split(delimiter);
// the next line is dangerous--what if there was only one token?
// should add a check that there were at least 2 elements.
lines.add(new String[] {tmp[0], tmp[1]});
line = br.readLine();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "File not found. Check name and directory.");
}
String[][] hexLibrary = new String[lines.length][];
lines.toArray(hexLibrary);
return hexLibrary;
}
(以上使用新的Java 7 try-with-resources syntax。如果您使用的是早期的Java,则应该在方法返回之前添加一个finally
子句,关闭br
。
答案 1 :(得分:0)
在阅读文件时,您没有检查流的结尾。
如果读者到达流的末尾,方法readLine
将返回null
。您在第一个null
循环(退出之前)中点击此点(for
),具体取决于文本文件中的行数。
答案 2 :(得分:0)
如果hexlibrary.txt的第一行(或任何行)为空或未由“,”s分隔,则split()返回的String数组可能为null。
要检查这一点,只需在第二个for循环周围添加一个if条件,如下所示:
if (temp == null) { /* your loop here */ }