2016-11-02 93 views
-1

我有一組字符串,我試圖使用匹配。 我現在有一組字符串,命名模式爲[[email protected]*, [email protected]*, specification*/specificationText],我需要能夠將它轉換爲[[email protected](.*), [email protected](.*), specification(.*)/specificationText],以便像specification1/specificationText或其他任何替代1的東西獲得匹配。Java中的模式

我的字符串:String abc = "specification1/specificationText";

是否有人可以幫助我如何去這樣做?

我寫的代碼,

private static Boolean isMatch(String abc, Set<String> patterns) { 

    for (String pattern : patterns) { 

     Pattern r = Pattern.compile(pattern); 

     if (r.matcher(abc).matches()) { 

      return Boolean.TRUE; 
     } 
    } 

    return Boolean.FALSE; 
} 

眼下r取值,specification*/specification它正在與specification1/specification比較。因此FALSE正在返回。

+0

給出更好的例子,說明你期望匹配什麼東西。不止一個例子。另外,您目前編寫的代碼有什麼問題?它有什麼作用?你卡在哪裏?請提供更多信息。 – nhouser9

+0

更正:我需要將我的字符串集轉換爲[title @(。*),text @(。*),specification(。*)/ specification]。現在r取值與規格1 /規格進行比較的規格* /規格。所以FALSE正在退回 – Grace

+1

快速修復:'Pattern r = Pattern.compile(pattern.replace(「*」,「(。*)」));' –

回答

1

你基本上需要(.*)更換*,只是.replace("*", "(.*)")做到這一點:

Pattern r = Pattern.compile(pattern.replace("*", "(.*)")); 

online Java demo

Set<String> patterns = new HashSet<String>(Arrays.asList("[email protected]*", "[email protected]*", "specification*/specificationText")); 
String abc = "specification1/specificationText"; 
System.out.println(isMatch(abc, patterns)); 
// => true 

而且方法:

private static Boolean isMatch(String abc, Set<String> patterns) { 
    for (String pattern : patterns) { 
     Pattern r = Pattern.compile(pattern.replace("*", "(.*)")); 
     if (r.matcher(abc).matches()) { 
      return true; 
     } 
    } 
    return false; 
} 

甚至(使其縮短,就像你一樣e不重新使用編譯的正則表達式):

private static Boolean isMatch(String abc, Set<String> patterns) { 
    for (String pattern : patterns) { 
     if (abc.matches(pattern.replace("*", "(.*)"))) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

非常感謝你WiktorStribiżew:) – Grace