2011-04-18 6 views
0

나는 자바 정규식에 대한 아주 새로운 프로그래머입니다. 분리 문자로 Java split을 사용하고 개별 토큰을 얻으려고하지 않습니다. 나는 그 깔끔한 길을 느끼지 못한다. 나는 다음과 같은 문자열정규식 자바 문자열에

"Some String lang:c,cpp,java file:build.java" 

내가 어떤 곳을 배치 할 수 있습니다 세 부분으로

1 part containing "Some String" 
2 part containing "c,cpp,java" 
3 String containing "build.java" 

lang:file:에이 헤어지고 싶은 그들이 선택 사항을 가지고있다.

+2

왜 '분할'되지 않습니까? 확실히 나쁘지 않습니다. – adarshr

+0

잘 분할 된 느낌으로 유지하기가 더 어려워집니다 –

답변

1

lang : 및 file :은 임의의 위치에 배치 할 수 있으며 선택 사항입니다.

언어 목록과 파일을 얻기 위해 다음과 같은 식을보십시오 :이 언어 목록 또는 공백을 포함하지 않는 파일 이름만큼 lang:xxx file:xxx뿐만 아니라 file:xxx lang:xxx와 함께 작동합니다

String input = "Some String lang:c,cpp,java file:build.java"; 
String langExpression = "lang:([\\w,]*)"; 
String fileExpression = "file:([\w\.]*)"; 

Patter langPattern = Pattern.compile(langExpression); 
Matcher langMatcher = langPattern.matcher(input); 
if (langMatcher.matches()) { 
    String languageList = langMatcher.group(1); 
} 

Patter filePattern = Pattern.compile(fileExpression); 
Matcher fileMatcher = filePattern.matcher(input); 
if (fileMatcher .matches()) { 
    String filename= fileMatcher.group(1); 
} 

. 이것은 lang : 및/또는 file :이 누락 된 경우에도 작동합니다.

다음과 같은 문자열도 필요합니까? file:build.java Some String lang:c,cpp,java?

+0

고마워 토마스, 나는 이것을 시험해 보겠다. 이것은 나를 위해 일하는 정규식을 얻을 수있는 아주 좋은 출발점이 될 것입니다. –

+0

@ Nandish 당신은 http://www.regular-expressions.info를보실 수 있습니다. IMHO는 매우 훌륭한 참고 자료입니다. – Thomas

0

split은 달성하려는 목표를 달성 할 수 있지만 substringindexOf 방법을 사용하여 자신의 코드를 작성할 수 있습니다. 성능 측면에서 split을 사용하는 것보다 훨씬 빠릅니다.

+2

영업 이익이 유지 관리 가능성에 관심이 있다면, 부분 문자열과 indexOf를 사용하여 자신 만의 변형을 롤링하는 것이 도움이되지 않을 것입니다. 게다가, 이것은 나에게 조숙 한 최적화의 냄새를 맡는다. – I82Much

+0

@ I82 많은 합의. – adarshr

1

split을 사용하면 "유지가 불가능합니다"는 무엇입니까?

 String str = "Some String lang:c,cpp,java file:build.java"; 
     String[] s = str.split("(lang|file):");