2016-05-11 9 views
2

Gibt es eine bessere Leistung ist weise:
string.matches("regex")
oder
Pattern.compile("regex").matches(string).find() ?Pattern.matches vs string.matches ("regex")

Was ich beziehe mich auf wird passend durch String.java ‚s matches() oder API in Pattern.java

+1

Antwort: Es hängt davon ab. – Tom

+1

Kann die Leistung von Äpfeln vs. Orangen nicht vergleichen. 'matches()' und 'find()' sind nicht die gleiche Operation. --- Auch wird der Code nicht kompiliert, da er 'matcher()' zwischen 'compile()' und 'find()' sein soll, nicht 'matches()'. – Andreas

Antwort

4

Implementierung von String.matches(String regex):

public boolean matches(String regex) { 
    return Pattern.matches(regex, this); 
} 

Implementierung von Pattern.matches(String regex, CharSequence input):

public static boolean matches(String regex, CharSequence input) { 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(input); 
    return m.matches(); 
} 

Fazit:str.matches(regex) i s genau gleich wie Pattern.compile(regex).matcher(str).matches().

Hinweis: Wie matches(), nicht identisch mit find().

Pattern.compile() zu verwenden ist besser/erforderlich, wenn:

  • Sie benötigen Zugriff auf die Matcher.
    Zum Beispiel Sie benötigen das Ergebnis von Erfassungsgruppen.

  • Sie machen das gleiche matches(regex) Anruf viele Male.
    Nur einmal das regex Muster kompilieren verbessert die Leistung.

0

Es hängt davon ab, ob Sie die Regex wiederverwenden werden. Wenn Sie dies tun, ist es besser, es nur einmal zu kompilieren. Die matches Funktion in String wird in Bezug auf die Pattern.matches definiert:

public boolean matches(String regex) { 
    return Pattern.matches(regex, this); 
} 

Snippet von openJDK7