2011-06-15 53 views
2

我想允许用户在搜索中使用metachar,并且想要使用由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

什么是你想改善?可读性?性能?简明? – 2011-06-15 09:55:59

+0

我写的代码非常冗长,我想要的是使用任何内置的功能,而不是我自己做这个。所以兼具可读性,简洁性 – keshav84 2011-06-15 10:50:05

回答

2

如何

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

没错。新的答案... – aioobe 2011-06-15 09:51:39

相关问题