这段代码旨在执行搜索,并使用另一列array的2列替换array.,此刻它正在此行上返回IndexOutOfBoundsException

fileContents.set(i, fileContents.get(i).replace(hexLibrary[i][0], hexLibrary[i][1]));


我是Java的新手,所以我对它的语法如何工作以弄清楚出什么问题还不够了解。整个搜索和替换代码块是:

String[][] hexLibrary;    // calls the replaces array from the LibToArray method
hexLibrary = LibToArray();

for(int i=0;i<hexLibrary.length;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
}


构建用于执行替换的array的代码为:

String thisLine;
String[] temp;
String delimiter=",";
String [][] hexLibrary = new String[501][2];

try {
    BufferedReader br= new BufferedReader(new FileReader("hexlibrary.txt"));

    for (int j=0; j<501; j++) {
        thisLine=br.readLine();
        if (thisLine != null) {
            temp = thisLine.split(delimiter);
            for (int i = 0; i < 2; i++) {
                hexLibrary[j][i]=temp[i];
            }
        } else {
            JOptionPane.showMessageDialog(null,"Library file corrupt.");
            break; // no point in continuing to loop
        }
    }

}


- - - - 编辑 - - - -

下面的代码初始化“ fileContents” array.

String FileName; // set file variable
FileName = fileName.getText(); // get file name

ArrayList<String> fileContents = new ArrayList<String>(); // create arraylist

BufferedReader reader = new BufferedReader(new FileReader(FileName)); // create reader
String line = null;

while ((line = reader.readLine()) != null) {
    if(line.length() > 0){       // don't include blank lines
        line = line.trim();      // remove whitespaces
        fileContents.add(line);  // add to array
    }
}

最佳答案

我们需要查看什么是fileContents,但是请不要考虑以下代码:

for(int i=0;i<hexLibrary.length;i++) {
    fileContents.set(i, fileContents.get(i).replace(hexLibrary[i][0], hexLibrary[i][1]));
}


您要将i从0迭代到hexLibrary.length-1,但同时也将i用作fileContents.get(i)的索引。如果fileContents的长度小于hexLibrary的长度,那么您将在fileContents.get(i)上收到一个OOB错误。

再次,只是猜测,但似乎您想要做的是遍历fileContents中的每一行,然后遍历hexLibrary中该行的每个条目,在这种情况下,这正是您应该执行的操作(您的代码不执行该操作):

for (int k = 0; k < fileContents.size(); ++ k) {
    for(int i=0;i<hexLibrary.length;i++) {
        fileContents.set(k, fileContents.get(k).replace(hexLibrary[i][0], hexLibrary[i][1]));
    }
}


您可能想做的事我可能是错的。

08-04 22:29