使用Pattern.compile()方法将 Java 正则表达式作为谓词

使用Pattern.compile()方法将 Java 正则表达式作为谓词

原文: 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 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);
	    }
	}
}

Output:

alex@example.com
david@example.com

将我的问题放在评论部分。

学习愉快!