2016-02-29 82 views
0

截至目前,我正在使用下面的方法來根據語句測試模式,但我想知道如何處理/嘗試匹配多個模式與單個語句。Java中的多模式匹配

我應該將模式存儲在一個數組中,並將它們與語句匹配,還是有更高效的(也許更簡單)方法?

public class StringConvenience { 
    public static void main(String[] argv) { 
     String pattern = ".*Q[^u]\\d+\\..*"; 
     String line = "Order QT300. Now!"; 

     if (line.matches(pattern)) { 
      System.out.println(line + " matches \"" + pattern + "\""); 
     } else { 
      System.out.println("NO MATCH"); 
     } 
    } 
} 
+0

您是否嘗試了自己的建議?怎麼了? – Popeye

+1

是的,你的方法是合理的。 – Maroun

回答

2

這並不難。只需使用一個數組和for循環。這很有效和簡單。

String line = "Order QT300. Now!"; 
String[] pattern = new String[3]; 
pattern[0] = ".*Q[^u]\\d+\\..*"; 
pattern[1] = ".*?"; 
pattern[2] = "ABC"; 

for (String pat : pattern) { 
    if (line.matches(pat)) { 
     System.out.println(line + " matches \"" + pat + "\""); 
    } else { 
     System.out.println("NO MATCH"); 
    } 
} 
+3

雖然很好的解決方案。使用預編譯的正則表達式可能會更好。可能會有性能提升。 – Neijwiert

+0

是的,你說'Pattern.compile(..)'的用法比較好。但是,如果正則表達式數量較少,則無關緊要。無論如何,謝謝你的提示:) –