原文: https://howtodoinjava.com/java8/regex-predicate-using-pattern-compile/
学习将正则表达式编译为java.util.function.Predicate。 当您要对匹配的标记执行某些操作时,此特性很有用。
将正则表达式转换为谓词
我有不同域的电子邮件列表,我只想对域名为example.com的电子邮件 ID 执行某些操作。
现在使用Pattern.compile().asPredicate()方法从编译的正则表达式中获取谓词。 该谓词可与 lambda 流一起使用,以将其应用于每个标记中。
import java.util.Arrays;import java.util.List;import java.util.function.Predicate;import java.util.regex.Pattern;import java.util.stream.Collectors;public class RegexPredicateExample {public static void main(String[] args) {// Compile regex as predicatePredicate<String> emailFilter = Pattern.compile("^(.+)@example.com$").asPredicate();// Input listList<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com","cat@google.com", "david@example.com");// Apply predicate filterList<String> desiredEmails = emails.stream().filter(emailFilter).collect(Collectors.<String>toList());// Now perform desired operationdesiredEmails.forEach(System.out::println);}}
输出:
alex@example.comdavid@example.com
使用Pattern.matcher()使用正则表达式
如果要使用旧的Pattern.matcher(),请使用以下代码模板。
public static void main(String[] args){Pattern pattern = Pattern.compile("^(.+)@example.com$");// Input listList<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com","cat@google.com", "david@example.com");for(String email : emails){Matcher matcher = pattern.matcher(email);if(matcher.matches()){System.out.println(email);}}}
Output:
alex@example.comdavid@example.com
将我的问题放在评论部分。
学习愉快!
