原创

JAVA8系列教程-使用Pattern.compile()方法时,正则表达式作为谓词

将正则表达式转换为谓词

我有不同域的电子邮件列表,我只想对域名为“ example.com”的电子邮件ID执行某些操作。

现在使用Pattern.compile().asPredicate()method 从编译的正则表达式获取谓词该谓词可与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 predicate
        Predicate<String> emailFilter = Pattern
                                        .compile("^(.+)@example.com$")
                                        .asPredicate();
 
        // Input list
        List<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com",
                            "cat@google.com", "david@example.com");
 
        // Apply predicate filter
        List<String> desiredEmails = emails
                                    .stream()
                                    .filter(emailFilter)
                                    .collect(Collectors.<String>toList());
 
        // Now perform desired operation
        desiredEmails.forEach(System.out::println);
    }
}

输出:

alex@example.com 
david@example.com

使用Pattern.matcher()使用正则表达式

如果要使用旧的Pattern.matcher(),请使用下面的代码模板。

public static void main(String[] args)
{
     
    Pattern pattern = Pattern.compile("^(.+)@example.com$");
     
    // Input list
    List<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);
        }
    }
}

输出:

alex@example.com 
david@example.com
正文到此结束
本文目录