0

*以下代码array从文本文件中的字符串构建“2D”。目前它正在返回NullPointException错误:

temp = thisLine.split(分隔符);我的问题是,我对temp回归的理解是否正确null?如果是这样,为什么,以及如何添加检查null?我对 Java 比较陌生,这是我第一次尝试从文件创建字符串arrayarrays*

- - - - 编辑 - - - -

以上已解决。

对于那些感兴趣的人,下面是返回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;
    }
4

3 回答 3

1

更有可能的thisLinenull。如果您在读取 ​​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 语法。如果您使用的是早期的 Java,您应该添加一个在方法返回之前finally关闭的子句。br

于 2013-08-07T01:10:47.523 回答
0

您在读取文件时没有检查流的结尾。

如果阅读器到达流的末尾,则方法readLine返回 a 。根据文本文件中的行数,您在第一个循环中(在它退出之前)null达到了这一点 ( )。nullfor

于 2013-08-07T01:12:42.230 回答
0

如果 hexlibrary.txt 的第一行(或任何一行)为空或没有用 ","s 分隔,则 split() 返回的 String 数组可能为 null。要检查这一点,只需在第二个 for 循环周围添加一个 if 条件,如下所示: if (temp == null) { /* your loop here */ }

于 2013-08-07T01:15:54.697 回答