2011-07-30 5 views
0

좋아,이 게시물은 중복 된 게시물이라고 말할 수 있습니다.여러 구분 기호를 사용할 때 자바 문자열 파싱 또는 split() 버그

나는 사용자가 지정한 구분 기호를 삭제하는 일을하고있는 프로그램을 만들고 있습니다. 구분 기호가 하나의 문자 (특수 문자 또는 특수 문자) 인 경우 내 프로그램이 작동합니다. 그러나 사용자 입력이 문자열 인 경우 메시지 문자열에서 구분 기호의 모든 문자를 제거합니다.

ex. 문자열 메시지 = "ab \ nc [d] e {fMardk1g (h) i} j"; 출력은 다음과 같습니다. bcefghij 하지만 예상되는 출력은 abcdefghij

입니다. 패턴 클래스를 처음 사용하기 때문에 문제가있는 곳을 모르겠습니다. 여기

문제의 코드 (나는 그래서이 문제를 분리 할 수있는 테스트 클래스에 넣어)입니다 :

수입 있으며, java.util.regex.Pattern을;

public class ParsingTest { 
    public static void main(String[] args) { 
     String[] delimiters = { "Mardk1", "\n", "[", "]", "{", "}", "(", ")" }; 
     StringBuilder regexp = new StringBuilder(""); 
     regexp.append("["); 
     for(String s : delimiters) { 
      regexp.append("["); 
      regexp.append(Pattern.quote(s)); 
      regexp.append("]"); 
     } 
     regexp.append("]"); 

     String message = "ab\nc[d]e{fMardk1g(h)i}j"; 
     StringBuilder result = new StringBuilder(""); 
     String[] a = message.split(regexp.toString()); 
     for(String string : a) { 
      result.append(string); 
     } 
     System.out.println(result); 
     for(String str: a) System.out.print(str); 
     System.out.println(); 
    } 
} 
+0

생성 된 정규식'[Mardk1]'문자 중 하나에 의해 구분됩니다'M, A, R, D, K 또는 1이 포함됩니다 :

정규식을 구축하는 대신 시도 ', 그리고 이것이 여러분이 출력에서'a' 문자를 보지 않는 이유입니다. – rodion

답변

1

잘못된 유형의 그룹화 구문을 사용하고 있습니다. 임의의 단일 문자 x, y 또는 z와 일치하는 [xyz]와 같은 패턴을 작성 중입니다. 여러 개의 전체 문자열 중 하나와 일치하므로 일반 () 스타일 그룹화 및 대체 연산자 (|)가 필요합니다. 자세한 내용은 Pattern 설명서를 참조하십시오.

for(String s : delimiters) { 
    // We don't want to start with (| 
    if (regexp.length() > 1) 
    { 
     regexp.append("|"); 
    } 
    regexp.append(Pattern.quote(s)); 
} 
+0

오, tnx ... 당신은 내 문제를 해결했습니다. 왜 "|" 단어 사이에 – JinShin

+0

@ JinShin : 그것은 그 또는 그 또는 (등)와 일치한다고 말하는 대체 연산자입니다. 따라서 "(ab | cd | ef)"는 "ab", "cd"또는 "ef"와 일치합니다. –

+0

오, 다시 tnx. 이제 이해가된다. – JinShin