我正在为另一个程序编写这个类,当我分割字符串 str 时,我不断收到一个数组超出范围的异常。
static String[][] readFile(){
BufferedReader in;
count = 0;
String[][] ret = new String[20][2];
try
{
in = new BufferedReader(new FileReader(CFGfolder+"\\input.ini"));
String str;
while((str=in.readLine()) != null){
if(str!="[GameEvents]"){
ret[count][0]=str.split("=")[0];
ret[count][1]=str.split("=")[1];
count++;
}
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
这是它正在阅读的文件的格式。
evtCastSpell1=[q]
evtCastSpell2=[w]
evtCastSpell3=[e]
evtCastSpell4=[r]
我试着看看 str 字符串到底是什么意思(意思是,在没有拆分的情况下打印它),它表明它正确地读取文件并将其放入数组中。当我尝试读取分割字符串的 [1] 时出现问题。 [0] 很好,它正确打印
evtCastSpell1
evtCastSpell2
evtCastSpell3
evtCastSpell4
我真的不知道为什么不读 [1] 部分。通常这种错误来自正则表达式,它是否理解第二部分中的 [>作为正则表达式?如果是这样我怎么解决这个问题?我试过环顾四周,但我能找到的是由于正则表达式而发生的类似错误。这一个是一样的吗?
感谢您的帮助。
答案 0 :(得分:4)
异常的原因可能是文件中的行数超过了数组的大小。
同时将此if(str!="[GameEvents]")
替换为if(!str.equals("[GameEvents]"))
以获得正确的结果。
答案 1 :(得分:2)
您正在进行引用相等性比较而不是字符串equals()
比较:
我会这样做:
while((str=in.readLine()) != null){
if(!"[GameEvents]".equals(str)) {
String[] splits = str.split("=");
ret[count][0]=splits[0];
ret[count][1]=splits[1];
count++;
}
}
你ArrayIndexOutOfBoundsException
的原因是因为:
if(str!="[GameEvents]"){
由于引用相等,if
表达式返回true
,您在值split()
上执行[GameEvents]
。
我希望这会有所帮助: