如何减少布尔表达式的复杂性?

时间:2015-10-12 05:29:58

标签: java

我有以下代码:

Pattern p1 = Pattern.compile("foo1");
Pattern p2 = Pattern.compile("foo2");
Pattern p3 = Pattern.compile("foo3");
Pattern p4 = Pattern.compile("foo4");
Pattern p5 = Pattern.compile("foo5");

if (p1.matcher(kvTarif.getkey()).matches() || p2.matcher(getkey()).matches() ||
        p3.matcher(getkey()).matches() || p4.matcher(getkey()).matches() ||
        p5.matcher(getkey()).matches())

checkstyle表示布尔复杂度为4(允许的最大值为3)。

如何降低复杂性?

1 个答案:

答案 0 :(得分:5)

根据您匹配的逻辑,您可以将模式数量减少到2:

Pattern p1 = Pattern.compile("foo1");
Pattern p2 = Pattern.compile("foo2|foo3|foo4|foo5");  // match foo2 through foo5

if (p1.matcher(kvTarif.getkey()).matches() || p2.matcher(getkey()).matches()) {
    // handle this case
}

正如用户@JonnyHenly所提到的,你可以使用它来简化第二种模式:

Pattern p2 = Pattern.compile("foo[2-5]");