我想读一些格式线:爪哇 - ArrayIndexOutOfBoundsException异常
名称|简;年龄| 64;状态|结婚
名称|安妮;年龄| 32;职业|银行;工资| 32000;状态|单一
每行包含不等数量的键值对。
我使用的对象矩阵分开并且将这些值存储为每下面的代码片断:
BufferedReader inputStream = null;
inputStream = new BufferedReader(new FileReader(arg[0]));
String Line=null;
while ((Line = inputStream.readLine()) != null) {
//STORE INTO KVP
int i = 0;
Object kvp[][]= new Object[40][2];
for (String element : Line.split(";")) {
kvp[i][0] = (element.split("\\|")[0]);
kvp[i][1] = (element.split("\\|")[1]);
i++;
}
col = i;
System.out.println("Object Matrix for the line:");
for (i = 0; i < col; i++) {
System.out.println(kvp[i][0] + " : " + kvp[i][1]);
}
} //end of while
在总共70行中,仅有39被分离并作为对象的矩阵存储和该异常显示为:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
>at first.main(first.java:32)
某些值,例如键,作为地址,真的很长。
'first.java:32'是什么行?你还没有发布整个文件的代码,所以我们不能告诉。 – nkorth
这里有几个问题: 1.您的“kvp”数组可能会导致OOB异常,因为您只允许输入40个条目,但在分割“Line”时不检查for循环。 2.您不检查格式不正确的行(没有|或没有任何其他行) 3.您的“kvp”数组在任何时候都会在while循环结束时丢失 – Fallso
之后会在kvp内完成更多的处理。至于格式不正确的行,输入来自另一个来源,它应该是没有错误的。但是,由于错误的来源是错误的输入,所以在处理之前必须对其进行检查。 –