ある部分文字列が他のいくつかの部分文字列のいずれかと等しいかどうかを確認したい場合。これは、各ケースを互いに並べることなく実行できますか:
現在の方法:
if ( substr.equals("move") || substr.equals("mv") || substr.equals("mov") ){…}
短いバージョン (動作しない):
if ( substr.equals("move" || "mv" || "mov") )
ある部分文字列が他のいくつかの部分文字列のいずれかと等しいかどうかを確認したい場合。これは、各ケースを互いに並べることなく実行できますか:
現在の方法:
if ( substr.equals("move") || substr.equals("mv") || substr.equals("mov") ){…}
短いバージョン (動作しない):
if ( substr.equals("move" || "mv" || "mov") )
すべての文字列を a に入れてSet<String>
、メソッドを使用しcontains
ます。
例えば:
private final Set<String> wordMoveTokens = new HashSet<String>(Arrays.asList("move", "mv", "moov"));
...
// substr = "move"
if (wordMoveTokens.contains(substr) ) {
.... // True
}
その他の例については、こちらをご覧ください。
これを行うには、少なくとも 3 つの異なる方法を考えることができます。
a を使用しSet<String>
て、可能なすべての一致を保持しSet<String>.contains()
、if ステートメントで使用します。
JDK 1.7 を使用している場合は、次のswitch
ステートメントを使用できます。
switch (substr) {
case "move":
case "mv":
case "mov":
// ...
break;
}
正規表現を使用します。
if (substr.matches("move|mov|mv") {
//...
}
以下を使用できます。
if ((Arrays.asList("move","mov","mv")).contains(substr))
試す:
private static final Set<String> SUBSTRINGS = new HashSet<>(Arrays.asList("move", "mv", "mov"));
...
SUBSTRINGS.contains(substr);
ネイティブ 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;
}
さて、それはすべてあなたのデータに依存します。あなたの最善の策は、現在行っていることをする必要がないように効果的に構造化することです;)