【发布时间】:2011-11-16 03:57:17
【问题描述】:
简而言之,我如何最好地检查两个 Reg Ex 模式集合是否相等(忽略顺序)?
关于我实际尝试使用它的更多信息,我有一个用于过滤日志消息的对象,此过滤器对象包含可用于过滤的每件事的集合,其中之一是 Reg Ex 模式。我为我的过滤对象创建了一个 equals 方法,因此我可以查看两个过滤器是否基本相同,对于其他集合我可以使用集合 .equals 方法,但我对 Pattern 对象有问题。
我可以将模式的字符串输入列表保留在不同的列表中,并将字符串列表与 .equals 进行比较,或者我可以运行所有对象并逐个检查它们,如果 .toString 与另一个匹配每个列表的列表如下:
boolean equals = true;
for (Pattern p1: patternList1) {
boolean found = false;
for (Pattern p2: patternList2) {
if(p1.toString().equals(p2.toString())) {
found = true;
break;
}
}
if(!found) {
equals = false;
break;
}
}
if(equals) {
for (Pattern p1: patternList2) {
boolean found = false;
for (Pattern p2: patternList1) {
if(p1.toString().equals(p2.toString())) {
found = true;
break;
}
}
if(!found) {
equals = false;
break;
}
}
}
return equals;
这看起来不是很有效但会起作用,但如果两个正则表达式模式匹配相同但写法不同,它就不会捕获。上面的代码如何以不同的方式优化/完成?是否有任何“简单”的方法来捕获写得不同但匹配相同的 reg ex?
【问题讨论】:
标签: java regex collections compare equals