java - 数组搜索时出现 IndexOutOfBoundsException

标签 java replace indexoutofboundsexception

这段代码的目的是使用另一个数组的2列在一个数组中执行搜索和替换。目前它返回一个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
}

构建用于执行替换的数组的代码是:

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”数组的代码。

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]));
    }
}

我对你想做的事情可能是错误的。

关于java - 数组搜索时出现 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108260/

相关文章:

java - 二维数组java中的Arrayindexoutofbounds

java - 从 GWT 调用 java

java - getClassLoader().getResource() 抛出 NullPointerException?为什么不是 FileNotFoundException?

java - 我如何使用 AspectJ 访问私有(private)字段?

python - 当mysql查询包含python中的占位符时如何搜索武术比赛?

foreach - 为什么我使用 foreach 总是得到 ArrayIndexOutOfBoundsException

java - 将日期转换为字符串时出错

url - Greasemonkey 脚本自动修改具有特定 id 值的 URL

regex - 如何在vi中替换NUL?

java - String.split 复制 : OutOfBoundsException