Java 11 agregó algunos métodos nuevos a la clase Pattern (una versión compilada de una expresión regular), que incluyen:
Estoy tratando de entender la diferencia entre los dos y cuándo me gustaría usar uno sobre el otro.
Pattern.asPredicate devolverá verdadero si alguna parte de la cadena de entrada coincide con la expresión regular. Debe usar este método si está probando un cuerpo de texto más grande para un patrón determinado. Por ejemplo, para probar si un comentario de un usuario contiene un hipervínculo.Pattern.asMatchPredicate devolverá verdadero si toda la cadena de entrada coincide con la expresión regular. Debe usar este método si está probando la entrada completa para un patrón determinado. Por ejemplo, para validar el número de teléfono de un usuario en su perfil. Pattern.asPredicate usa internamente Matcher.find() , mientras que Pattern.asMatchPrediate usa internamente Matcher.matches() . Entonces, la diferencia entre los dos se reduce a la diferencia entre estos dos métodos de la clase Matcher .
A continuación se muestran algunos ejemplos para mostrar la diferencia. Puede copiar y pegar el código siguiente en un entorno limitado de Java en línea como https://www.compilejava.net/ para jugar con él usted mismo.
import java.util.regex.Pattern; import java.util.function.Predicate; public class main { public static void main(String[] args) { Pattern pattern = Pattern.compile("abc"); // asPredicate will match any part of the input string Predicate<String> asPredicate = pattern.asPredicate(); // True, because abc is part of abc System.out.printf("asPredicate: abc: %s\n", asPredicate.test("abc")); // True, because abc is part of abcabc System.out.printf("asPredicate: abcabc: %s\n", asPredicate.test("abcabc")); // True, because abc is part of 123abc123 System.out.printf("asPredicate: 123abc123: %s\n", asPredicate.test("123abc123")); // False, because abc is NOT part of 123 System.out.printf("asPredicate: 123: %s\n", asPredicate.test("123")); // -> false // asMatchPredicate will only match the entire input string Predicate<String> asMatchPredicate = pattern.asMatchPredicate(); // True, because abc exactly matches abc System.out.printf("asMatchPredicate: abc: %s\n", asMatchPredicate.test("abc")); // False, because abc does not exactly match abcabc System.out.printf("asMatchPredicate: abcabc: %s\n", asMatchPredicate.test("abcabc")); // False, because abc does not exactly match 123abc123 System.out.printf("asMatchPredicate: 123abc123: %s\n", asMatchPredicate.test("123abc123")); // False, because abc does not exactly match 123 System.out.printf("asMatchPredicate: 123: %s\n", asMatchPredicate.test("123")); } }