2012-06-09 6 views
0

이 문제로 인해 며칠 동안 나를 좌절시킬 수있었습니다. 나는 문자열 분할을 사용하여 문자열의 두 번째 절반을 찾습니다.string.split을 사용할 때 ArrayIndexOutOfBounds

String pieces[] = piece.split(before[x]); 
    piece = piece.split(before[x])[1]; 

디버그 모드에서 내가 결정한 piece =

<area shape="circle" coords="329,152,13" href="#g35" alt="" onmouseover="return overlib\('&lt;b>Southeast False Creek&lt;/b>&lt;br>215 West 1st Avenue' , SNAPX, 20, SNAPY, 20\);" onmouseout="return nd\(\);"/> 

split와 내가 ArrayIndexOutOfBounds 예외를 얻고 몇 가지 이유를 들어

<area shape="circle" coords="329,152,13" href="#g35" alt="" onmouseover="return overlib\('&lt;b> 

before[x] = 인덱스를 말하는 것을 : 여기 내 코드입니다 하나는 유효하지 않습니다. 왜 이런 일이 일어나고 있는지 모릅니다. 그래서 어떤 도움을 주시면 감사하겠습니다!

+0

코드에서 벗어날 수있는 내용은 컴파일되지 않습니다. [SSCCE] (http://www.sscce.org)를 제공해 주시겠습니까? 그건 그렇고, 스택 오버플로에 오신 것을 환영합니다! :) – kentcdodds

+0

'piece'의 값을 다시 만들려고했습니다. (그런데'String peper'가 아니라'String pieces []'가 아닌) 문자열의 배열입니다. 즉, 이전에 [x] 전에 나눌 수 있었던 것은 아무것도 없다는 것을 의미합니다. 'before [x] '다음에 모든 것을 얻으려고합니까? 그렇다면 '하위 문자열'호출이 더 나을 것입니다. – kentcdodds

+2

'문자열 조각 []'은'문자열 [] 조각들 '과 같습니다. – aioobe

답변

2

piece.split(before[x])[1]을 사용하는 문자열의 나머지 절반을 가져 오려고하고 그 예외가 throw되는 경우 분명히 문자열 배열 piece.split(before[x])에 두 번째 요소가 없다는 것을 의미합니다. 당신이해야 할 일은 piece.split(Pattern.quote(before[x]))을 시도한 다음 배열의 문자열 수를 확인하는 것입니다. 1보다 크면 piece.split(Pattern.quote(before[x]))[1]을 사용하여 문자열의 두 번째 절반을 가져올 수 있습니다.

은 자세한 내용 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html#quote(java.lang.String)

+0

+1,'Pattern.quote'는 갈 방법입니다 !!! – Premraj

1

사항 String.split 조각으로 문자열을 분할하는 정규 표현식을 사용하여이 읽기. "[x] before"에는 일반 특수 문자 (예 : "\")가 포함되어 있으므로 이러한 특수 문자를 이스케이프 처리해야합니다. http://www.regular-expressions.info/reference.html (특수 문자 목록 사용)

관련 문제