2012-10-17 2 views
1
public static void main(String[] args){ 
    String testStr = "Test test. Test 2. Test3?"; 
    String[] newStr = testStr.split(".?"); 
    System.out.print(newStr[0]); 
} 

Array Index Out of Bounds 예외가 발생하고 newStr의 길이가 0입니다. "."에서 토큰으로 문장을 분리하고 싶습니다. 및 "?". 어떤 오류가 발생합니까?자바 분할 문자열 "." 및 "?"

답변

4

String#split는 분할 매개 변수로 정규 표현식을합니다. .?은 정규 표현식에서 특별한 의미가 있습니다.

당신은 그들 중 하나에 분할 문자 클래스를 사용할 수 있습니다

testStr.split("[.?]"); 

를 문자 클래스 내부에 특수 문자가 문자 클래스 안에 의미를 잃을대로, 이스케이프 할 필요가 없습니다. 정상적인 파이프 |와 함께 사용하는 경우

, 당신은 그것을 탈출해야합니다 -

testStr.split("\\.|\\?"); 

UPDATE을 : - 당신은 당신의 구분 기호를 유지하려면 : 나는하지 않았다

testStr.split("(?<=[.?])") 
+0

고마워요. 토큰에 기간과 물음표를 보존 할 수있는 방법이 있습니까? – user1436111

+0

@ user1436111 그 코드를 추가했습니다. 봐. –

+0

정말 고마워요. – user1436111

4

해당 문자를 이스케이프 처리해야합니다. "\\.""\\?"을 사용하십시오. 이것은 String#split이 정규 표현식을 받고 두 문자가 모두 정규 표현식의 특수 문자이기 때문입니다.

4

.?을 탈출해야합니다. 사용

String[] newStr = testStr.split("\\.|\\?"); 
+0

을 "a 또는 b"를 그룹으로 묶는 괄호를 알고있는 것은 선택 사항입니다. –