2016-11-02 2 views
-1

Ich habe eine Reihe von Zeichenfolge und ich versuche, Übereinstimmungen zu verwenden. Meine Reihe von String, benannt Muster hat jetzt [[email protected]*, [email protected]*, specification*/specificationText] und ich muss in der Lage sein, es in [[email protected](.*), [email protected](.*), specification(.*)/specificationText] zu konvertieren, so dass etwas wie specification1/specificationText oder etwas anderes anstelle von 1 wird abgestimmt.Muster in Java

Meine string: String abc = "specification1/specificationText";

Kann jemand bitte helfen Sie mir mit, wie über das tun dies gehen?

Der Code, den ich geschrieben habe

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

Gerade jetzt r nimmt den Wert, specification*/specification die mit specification1/specification verglichen wird. So wird FALSE zurückgegeben.

+0

Geben Sie bessere Beispiele für die Dinge, die Sie erwarten, zu entsprechen. Mehr als ein Beispiel. Was ist mit dem Code, den du gerade geschrieben hast, falsch? Was tut es? Wo steckst du fest? Mehr Informationen bitte. – nhouser9

+0

Korrektur: Ich muss meine Zeichenkette konvertieren in, [Titel @ (. *), Text @ (. *), Spezifikation (. *)/Spezifikation]. Gerade jetzt nimmt r den Wert, Spezifikation */Spezifikation, die mit Spezifikation1/Spezifikation verglichen wird. Also wird FALSE zurückgegeben – Grace

+1

Schnelle Lösung: 'Pattern r = Pattern.compile (pattern.replace (" * "," (. *) "));' –

Antwort

1

Sie müssen grundsätzlich * mit (.*) ersetzen, tun Sie es einfach mit .replace("*", "(.*)"):

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

Siehe 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 

Und die Methode:

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

Oder sogar (um es kürzer zu machen, wie du bist Verwenden Sie die kompilierte Regex nicht erneut):

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

Vielen Dank Wiktor Stribiżew :) – Grace