2011-09-22 5 views
0

を使用するときに「にArrayIndexOutOfBounds」例外を取得しておきます。私は別のプログラムのために、このクラスを書いていますし、私は、文字列strの<strong></strong>を分割していたときに境界例外のうちの配列を取得しておくのstring.Split

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]部分を読んでされていない理由はわかりません。通常、この種のエラーは正規表現から来ています。それは正規表現として第2部分の[]を理解していますか?もしそうなら、どうすれば回避できますか?私は周りを見てみましたが、私が見つけることができるのは、正規表現のために起こる同様のエラーです。これは同じですか?

ありがとうございました。

+0

あなたが尋ねたものではありませんが、新しいFileReader(新しいファイル(CFGfolder、 "input.ini"))を使用してプラットフォーム固有のコーディングを避けるべきです。 – MeBigFatGuy

+0

あなたはsplitを2回実行するのを避けるために、おそらく 'ret [count] = str.split(" = ");'を実行することもできます。 – MeBigFatGuy

+0

例外の理由と正しいコードがsudmongの答えで与えられている間、あなたのコードには他の問題もあるかもしれません。 countが配列の大きさ20を超えている場合は、配列発見のための配列発見もあります。 –

答えて

2

私はこれを行うだろう:

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]"))に置き換えてください。あなたが代わりに文字列equals()比較の参照の等価比較を行っている

+0

私はそれがどのように問題であるかわかりません。問題は配列str.split( "=")[1]が存在しないことです。問題は、分割によって作成される配列が長さ1であるため、[0]要素だけが存在することです。だから質問は、それはなぜですか? – Nacht

+0

私の答えを見てください。例外の理由は、 "ファイルの行数が配列のサイズより大きくなる可能性があります"という理由が考えられます。そして、条件の場合@エリート紳士の答え – sudmong

関連する問題