1

ある部分文字列が他のいくつかの部分文字列のいずれかと等しいかどうかを確認したい場合。これは、各ケースを互いに並べることなく実行できますか:

現在の方法:

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

短いバージョン (動作しない):

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

6 に答える 6

8

すべての文字列を a に入れてSet<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. a を使用しSet<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 内では、いいえ。

ただし、多くの可能性があります。を使用すると、一種のショートカットがあります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 に答える