2013-01-15 2 views
3

나는 형식의 문자열 분할 자바를 사용하고 있습니다 : 내가주는 공백 따라 문자열을 분할정규식 사항 String.split()

String[] tokens = stringToParse.split("\\s"); 

을 사용하고

String stringToSplit = "AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK"; 

을 :

tokens = {"AAA","BBB","CCC", "DDD","EEE","FFF","GGG","HHH","III", "JJJ", "KKK"} 

지금해야 할 일은 대부분의 경우 공백을 따라 분할되지만 특정 경우에는 일부 문자열을 함께 유지하는 것입니다. 예를 들어, "CCC DDD"와 "III JJJ KKK"를 분리 할 때 전체 문자열로 유지하고 싶습니다. 따라서 토큰 배열을 다음과 같이 지정하십시오.

tokens = {"AAA","BBB","CCC DDD","EEE","FFF","GGG","HHH","III JJJ KKK"} 

어떤 정규 표현식을 사용할 수 있습니까? 이것이 가능한가?

+0

, 당신이 사용할 수있는'문자열을. – jlordo

+0

무엇보다도, 당신은 그들이 함께하기로 결정한 근거가 무엇입니까? 그 끈은 어때? 당신은 어떻게 든 그들 사이에 다른 구분자를 사용할 수 없습니까? 이러한 질문을 생각해 보면 문제가 더 쉽게 될 수 있습니다. –

+0

내 형식이 아닙니다. 약간의 날씨 데이터를 파싱 할 예정입니다. CCC DDD와 같이 중간에 공간이있는 데이터가 하나 인 두 가지 경우를 제외하고는 거의 모든 것이 공백으로 구분 된 간단한 토큰입니다. – systemoutprintln

답변

6

ccc ddd를 ccc_ddd로 바꾸고 나중에 밑줄을 공백으로 변환 할 수 있습니다.

당신은 split()를 사용

+0

이것에 대해 생각하지 못했습니다 ... 작동 할 수 있습니다. 정규 표현식을 처음 사용하기 때문에 기본적으로이를 수행 할 수있는 방법이 있다고 생각했습니다. – systemoutprintln

+1

실용주의 +1. – leonbloy

3

대신 이런 종류의 많은 일을 할 거라면 구문 분석기의 일종에 투자 할 수 있습니다, 당신은 당신이 아닌 모든 연속을 찾아 다음과 같은 방법을 사용할 수 있습니다 -whitespace 문자뿐 아니라 공백가 포함 된 특정 대상 문자열에 맞게 교대를 사용

Pattern p = Pattern.compile("CCC DDD|III JJJ KKK|\\S+"); 
Matcher m = p.matcher("AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK"); 
while(m.find()) { 
    System.out.println(m.group()); 
} 

예 :()`대신 정규식의 형식이 고정되어있는 경우 http://ideone.com/AxI1CV

관련 문제