2016-11-02 6 views
-1

文字列があり、一致するものを使用しようとしています。 文字列の名前付きパターンには[[email protected]*, [email protected]*, specification*/specificationText]があり、などのようなものが1と一致するように、それを[[email protected](.*), [email protected](.*), specification(.*)/specificationText]に変換する必要があります。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; 
} 

rspecification1/specificationと比較されている値、specification*/specificationを取ります。したがってFALSEが返されています。

+0

あなたは、どのようなものが一致すると思われるより良い例を挙げてください。複数の例。また、現在書いているコードの何が間違っていますか?それは何をするためのものか?あなたはどこにいるのですか?より多くの情報をお願いします。 – nhouser9

+0

修正:文字列のセットを[title @(。*)、text @(。*)、specification(。*)/ specification]に変換する必要があります。現在、rはspec1/specificationと比較されている値、specification */specificationをとります。したがって、FALSEが返されています – Grace

+1

クイックフィックス: 'Pattern r = Pattern.compile(pattern.replace(" * "、"(。*) "));' –

答えて

1

は、基本的にはちょうど.replace("*", "(.*)")でそれを行う、(.*)*を交換する必要があります。

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; 
} 

あるいは

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

online Java demoを参照してください。 (それをもっと短くするために、arコンパイルされた正規表現を再使用しないでください):

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