替代if(东西|| somethingElse || somethingElse2 || somethingElse3 ...)

时间:2014-12-19 09:51:32

标签: java performance design-patterns syntax

我在考虑如何改进我的计划的一部分,但我想知道是否有一个"银弹"对于这种情况。是否有任何策略可以避免这样的大if OR statements?:

public boolean containsCharOfWord() {
        if (this.name.contains("b") || this.name.contains("a")
                || this.name.contains("c") || this.name.contains("t")
                || this.name.contains("e") || this.name.contains("r")
                || this.name.contains("i") || this.name.contains("a")) {
            return true;
        }
        return false;
    }

谢谢大家!

5 个答案:

答案 0 :(得分:4)

Guava

return CharMatcher.anyOf("bacteria").matchesAnyOf(name);

花哨的版本将是

private static final CharMatcher VIRUS = CharMatcher.anyOf("bacteria").precomputed();

... return VIRUS.matchesAnyOf(name);

预计算返回更快的匹配器。

答案 1 :(得分:3)

您应该尝试使用正则表达式

public boolean containsCharOfWord() {
        return this.name.matches("(.*)([bacteria])(.*)");
}

答案 2 :(得分:1)

首先,删除this.name.contains(“a”),因为它是重复的

然后你可以尝试切换(JDK7)

    switch (name) {
    case "b":
      // do something
    case "a":
      // do something
    case "c":
      // do something
    case "t":
      // do something
    case "e":
      // do something
    case "r":
      // do something
    case "i":
      // do something
    }

答案 3 :(得分:1)

您想要概括名称中的一系列字符:

public boolean containsAnyCharOfWord(String word) {
    for (int i = 0; i < word.length(); i++) {
        if (this.name.contains(String.valueOf(word.charAt(i)))) {
            return true;
        }
    }
    return false;
}

public boolean containsCharOfWord() {
    return containsAnyCharOfWord("bacteri"); // don't need to check for 'a' twice
}

答案 4 :(得分:1)

没有任何外部库:使用正则表达式匹配/模式匹配:即。 &#34;我的字符串是否匹配任何所述字符&#34;?

myString.matches(".*[bacteria].*")