如果我想查看一个子字符串是否等于其他几个子字符串中的任何一个。这是否可以在不将每个案例放在一起的情况下做到:
当前方式:
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") )
将所有字符串放入 aSet<String>
并使用该contains
方法。
例如:
private final Set<String> wordMoveTokens = new HashSet<String>(Arrays.asList("move", "mv", "moov"));
...
// substr = "move"
if (wordMoveTokens.contains(substr) ) {
.... // True
}
在这里查看更多示例。
我可以想到至少 3 种不同的方法来做到这一点:
使用 aSet<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 中,没有。
然而有很多可能性。如果您使用 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;
}
现在,这一切都取决于您的数据。你最好的办法是有效地构建它,这样你就不必做你现在做的事情;)