2011-09-22 123 views
0

我正在爲另一個程序編寫此類,並且當我拆分字符串時,我不斷收到數組超出範圍異常str當我使用String.split時,我總是收到一個「ArrayIndexOutOfBounds」異常

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

不是你問什麼,而是你應該使用'新FileReader(新文件(CFGfolder,「input.ini」))''以避免平臺特定的編碼。 – MeBigFatGuy

+0

你也可以'ret [count] = str.split(「=」);'以避免分裂兩次。 – MeBigFatGuy

+0

雖然在sudmong的答案中給出了例外的原因和正確的代碼,但您的代碼也可能有其他問題。如果count超過數組大小20,那麼也會有一個arrayindexoutofboundexception。 – 2011-09-22 06:09:42

回答

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而您正在執行價值[GameEvents]上的split()

我希望這有助於:

+0

+1。精英,爲什麼'ret [count] [1] = str.split(「=」)[1];'不工作?任何想法? – Vaandu

+0

@Vanathi,查看我更新的帖子。 –

+0

非常感謝!我不能相信我忘了弦必須作爲對象進行比較。我是啞巴:p – Nacht

4

異常的原因可能是文件中的行數超過了數組的大小。 也可以用if(str!="[GameEvents]")替換爲if(!str.equals("[GameEvents]"))以獲得正確的結果。

+0

我不明白這是怎麼回事。問題是數組str.split(「=」)[1]不存在。問題是由分割創建的數組長度爲1,因此只有[0]元素存在。所以問題是,爲什麼呢? – Nacht

+0

看到我的答案,異常的原因可能是「可能是文件中的行數超過了數組的大小」。如果條件請參閱@The Elite Gentleman的回答 – sudmong

相關問題