2011-09-22 18 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

요청한 내용이 아니지만 플랫폼 별 코딩을 피하기 위해'new FileReader (새 파일 (CFGfolder, "input.ini"))'를 사용해야합니다. – MeBigFatGuy

+0

당신은 split을 두 번하는 것을 피하기 위해'ret [count] = str.split ("=");'할 수도 있습니다. – MeBigFatGuy

+0

예외가있는 이유와 올바른 코드가 sudmong의 답변에 나와 있지만 코드에도 다른 문제가있을 수 있습니다. 개수가 배열 크기 20을 초과하면 바운더레이션을위한 배열 인덱스도 생깁니다. –

답변

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

내 대답을 참조하십시오. 예외의 이유는 "파일의 행 수가 배열 크기보다 클 수 있습니다"입니다.그리고 만약에 조건이 @ 엘리트 신사의 대답 – sudmong

관련 문제