我正在为另一个程序编写此类,并且在拆分字符串str时,我不断收到Array out of bounds异常。
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]部分。通常,此类错误来自正则表达式,是否将第二部分中的[理解为正则表达式?如果是这样,我将如何解决?我尝试环顾四周,但我只能找到由于正则表达式引起的类似错误。这是一样的吗?
谢谢您的帮助。
最佳答案
您正在执行引用相等性比较,而不是字符串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]
。我希望这有帮助:
更多见解:Java String.equals versus ==。