该内容主要用于数组和字符串,需求数组中设置关键字,判断字符串是否匹配,这里我用了正则表达式来匹配
第一种形式:是我自定义的正则表达式,这种方法是比较原始的拼接方式
public static void main(String[] args) {
String exp = "(?=.*";
String[] split = {"2021", "中国"};
if (split != null && split.length > 0) {
for (String str : split) {
if (split.length > 1) {
exp += str + ")(?=.*";
} else {
exp += str;
}
}
// 去掉最后几个连接符
if (split.length > 1) {
exp = exp.substring(0, exp.length() - 6);
}
exp += ")^.*$";
System.out.println(exp);
String ret = "2021年将迎来中国*建党100周年";
Pattern p = Pattern.compile(exp);
Matcher m = p.matcher(ret);
if (m.matches()) {
System.out.println("匹配:" + m.matches());
} else {
System.out.println("不匹配" + m.matches());
}
}
}
结果:
如果数组split中有一个内容是错误的,就会返回false
第二种形式:使用StringBuilder来拼接正则表达式,这里我使用错误内容来演示
public static void main(String[] args) {
String ret = "2021年将迎来中国*建党100周年";
String[] split = {"2020", "中国"};
StringBuilder regexp = new StringBuilder();
for (String str : split) {
regexp.append("(?=.*").append(str).append(")");
}
System.out.println(regexp.toString());
Pattern pattern = Pattern.compile(regexp.toString());
System.out.println("结果:" + pattern.matcher(ret).find());
}
这两种形式都可以匹配关键字。这里我要说明一下,为什么不使用contains方法,因为这个方法只能匹配部分,也就是只要有一个关键字符合,那么这个句话就是true,而我需要每一条都符合,所以不能使用,这也是完全匹配和部分匹配的区别。