2011-06-15 4 views
2

사용자가 검색시 "*" 메타 문자를 사용하고 사용자가 입력 한 패턴을 Pattern.compile과 같이 사용하고 싶습니다. 따라서 사용자가 입력하는 다른 모든 메타 문자는 *을 제외하고는 모두 탈출해야합니다. 아래 코드를 사용하여이 작업을 수행하는 더 좋은 방법이 있습니까?일부 메타를 제외하고 패턴의 모든 문자를 이스케이프 처리합니다.

private String escapePattern(String pattern) { 
     final String PATTERN_MATCH_ALL = ".*"; 
     if(null == pattern || "".equals(pattern.trim())) { 
      return PATTERN_MATCH_ALL; 
     } 
     String remaining = pattern; 
     String result = ""; 
     int index; 
     while((index = remaining.indexOf("*")) >= 0) { 
      if(index > 0) { 
       result += Pattern.quote(remaining.substring(0, index)) + PATTERN_MATCH_ALL; 
      } 
      if(index < remaining.length()-1) { 
       remaining = remaining.substring(index + 1); 
      } else 
       remaining = ""; 
     } 
     return result + Pattern.quote(remaining) + PATTERN_MATCH_ALL; 
    } 
+0

어떻습니까? 가독성? 공연? 간결? –

+0

필자가 작성한 코드는 매우 장황하다. 필자도이 일을 대신 수행하는 inbuilt 기능을 사용하고 싶었다. 그래서 두 가독성, 간결 성 – keshav84

답변

2

어떻게 개선하기 위해 노력하고 무엇

"\\Q" + pattern.replace("*", "\\E.*\\Q") + "\\E"; 
+0

오른쪽. 새로운 답변 ... – aioobe

관련 문제