1

如果我想查看一个子字符串是否等于其他几个子字符串中的任何一个。这是否可以在不将每个案例放在一起的情况下做到:

当前方式:

if ( substr.equals("move") || substr.equals("mv") || substr.equals("mov") ){…}

较短的版本(不工作):

if ( substr.equals("move" || "mv" || "mov") )
4

6 回答 6

8

将所有字符串放入 aSet<String>并使用该contains方法。

例如:

private final Set<String> wordMoveTokens = new HashSet<String>(Arrays.asList("move", "mv", "moov"));
...
// substr = "move"
if (wordMoveTokens.contains(substr) ) {
   .... // True
}

这里查看更多示例。

于 2013-06-16T21:21:23.850 回答
4

我可以想到至少 3 种不同的方法来做到这一点:

  1. 使用 aSet<String>保存所有可能的匹配项并Set<String>.contains()在您的 if 语句中使用。

  2. 如果您使用的是 JDK 1.7,则可以使用以下switch语句:

    switch (substr) {
        case "move":
        case "mv":
        case "mov":
            // ...
            break;
    }
    
  3. 使用正则表达式:

    if (substr.matches("move|mov|mv") {
        //...
    }
    
于 2013-06-16T21:24:18.557 回答
3

你可以试试这个方法

substr.matches("move|mv|mov");

但要小心正则表达式特殊字符,如$, ^,等。+*

于 2013-06-16T21:26:26.380 回答
2

您可以使用:

if ((Arrays.asList("move","mov","mv")).contains(substr))
于 2013-06-16T21:34:25.300 回答
1

尝试:

private static final Set<String> SUBSTRINGS = new HashSet<>(Arrays.asList("move", "mv", "mov"));

...

SUBSTRINGS.contains(substr);
于 2013-06-16T21:21:49.367 回答
1

在本机 JDK 中,没有。

然而有很多可能性。如果您使用 a ,则有一种快捷方式Set

// Written with Guava, I'm too lazy
final Set<String> moves = ImmutableSet.of("move", "mv", "mov");
moves.contains(substr); // true if there is a match

或自定义函数:

public boolean matchesOneOf(String whatToMatch, String... candidates)
{
    for (final String s: candidates)
        if (whatToMatch.equals(s))
            return true;
    return false;
}

现在,这一切都取决于您的数据。你最好的办法是有效地构建它,这样你就不必做你现在做的事情;)

于 2013-06-16T21:23:09.803 回答