2016-05-11 2 views
2

Что лучше производительность мудрым:
string.matches("regex")
или
Pattern.compile("regex").matches(string).find() ?Pattern.matches против string.matches ("регулярное выражение")

То, что я имею в виду это соответствие через String.java «s matches() или API в Pattern.java

+1

Ответ: это зависит. – Tom

+1

Невозможно сравнить производительность яблок против апельсинов. 'matches()' и 'find()' это не одна и та же операция. --- Кроме того, код не будет компилироваться, так как он должен быть 'matcher()' между 'compile()' и 'find()', а не 'matches()'. – Andreas

ответ

4

Внедрение в String.matches(String regex):

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

Реализация 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(); 
} 

Заключение:str.matches(regex) i s точно такой же как Pattern.compile(regex).matcher(str).matches().

Примечание: То же, что и matches(), не такое же, как find().

Pattern.compile() Использование лучше/требуется, если:

  • Вы должны иметь доступ к Matcher.
    E.g. вам нужен результат групп захвата.

  • Вы делаете то же самое matches(regex) звоните много раз.
    Только компиляция шаблона regex однажды повышает производительность.

0

Это зависит от того, будете ли вы повторно использовать регулярное выражение. Если вы это сделаете, лучше скомпилировать его только один раз. matches функция String определяется в терминах Pattern.matches:

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

Отрывок из openJDK7