Java 用于多字符串比较的速记(或较短语法)
如果我想看看一个子串是否等于其他几个子串中的任何一个。这是否可以在不将每个箱子放在一起的情况下实现: 当前方式:Java 用于多字符串比较的速记(或较短语法),java,Java,如果我想看看一个子串是否等于其他几个子串中的任何一个。这是否可以在不将每个箱子放在一起的情况下实现: 当前方式: if ( substr.equals("move") || substr.equals("mv") || substr.equals("mov") ){…} 较短版本(不工作): 将所有字符串放入集合并使用包含方法 例如: private final Set<String> wordMoveTokens = new HashSet<String>(Array
if ( substr.equals("move") || substr.equals("mv") || substr.equals("mov") ){…}
较短版本(不工作):
将所有字符串放入
集合
并使用包含
方法
例如:
private final Set<String> wordMoveTokens = new HashSet<String>(Arrays.asList("move", "mv", "moov"));
...
// substr = "move"
if (wordMoveTokens.contains(substr) ) {
.... // True
}
private final Set wordMoveTokens=新哈希集(Arrays.asList(“move”、“mv”、“moov”);
...
//substr=“移动”
if(wordMoveTokens.contains(substr)){
..//对
}
查看更多示例。将所有字符串放在
集中
并使用contains
方法
例如:
private final Set<String> wordMoveTokens = new HashSet<String>(Arrays.asList("move", "mv", "moov"));
...
// substr = "move"
if (wordMoveTokens.contains(substr) ) {
.... // True
}
private final Set wordMoveTokens=新哈希集(Arrays.asList(“move”、“mv”、“moov”);
...
//substr=“移动”
if(wordMoveTokens.contains(substr)){
..//对
}
查看更多示例。尝试:
private static final Set<String> SUBSTRINGS = new HashSet<>(Arrays.asList("move", "mv", "mov"));
...
SUBSTRINGS.contains(substr);
private static final Set substring=new HashSet(Arrays.asList(“move”、“mv”、“mov”);
...
substring.contains(substr);
试试:
private static final Set substring=new HashSet(Arrays.asList(“move”、“mv”、“mov”);
...
substring.contains(substr);
在本机JDK中,没有
然而,有许多可能性。如果使用集合
,则有一种快捷方式:
// 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
现在,一切都取决于你的数据。你最好的办法是有效地组织它,这样你就不必做你目前正在做的事情;) 在本机JDK中,没有 然而,有许多可能性。如果使用
集合
,则有一种快捷方式:
// 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
现在,一切都取决于你的数据。你最好的办法是有效地组织它,这样你就不必做你目前正在做的事情;) 我可以想出至少3种不同的方法来实现这一点:
Set
保存所有可能的匹配项,并在if statmeent中使用Set.contains()
开关
语句:
switch (substr) {
case "move":
case "mv":
case "mov":
// ...
break;
}
if (substr.matches("move|mov|mv") {
//...
}
我可以想出至少3种不同的方法来做到这一点:
Set
保存所有可能的匹配项,并在if statmeent中使用Set.contains()
开关
语句:
switch (substr) {
case "move":
case "mv":
case "mov":
// ...
break;
}
if (substr.matches("move|mov|mv") {
//...
}
substr.matches("move|mv|mov");
但是要小心像$
,^
,+
,*
和其他的东西。你可以这样尝试
substr.matches("move|mv|mov");
但是要小心使用诸如$
、^
、+
、*
等。您可以使用:
if ((Arrays.asList("move","mov","mv")).contains(substr))
您可以使用:
if ((Arrays.asList("move","mov","mv")).contains(substr))
不使用本机JDK,但是编写一个不使用本机JDK的方法非常容易,但是编写一个使用本机JDK的方法非常容易that@TomHawtin-为什么不呢?当然,如果愿意,您可以将此代码移动到helper方法,但是这里的HashSet没有问题。为什么要用Set包装它?List还有
contains
方法。这是真的,但要创建HashSet,首先需要迭代所有List元素。使用List.contains()
进行迭代,直到找到正确的对象。此外,要生成哈希代码,还需要迭代所有字符串。所以在你做O(n)之后,它将类似于O(1)。@Pshemo我知道这一点。但它也涉及哈希代码生成和整数比较与字符串比较。我想这也取决于输入,我还没有对其进行基准测试。在处理与基于哈希的数据结构配合良好的数据结构时,使用HashSet进行contains操作可能只是个人的爱好。只要您必须将不同的字符串与同一组值进行比较,它肯定会得到回报。@Pshemo请参阅我的编辑。收益现在更加明显。当然,这取决于您是否知道要在编译时进行比较的字符串集,或者该字符串集是否是动态的,是否也是一次性的。@TomHawtin-tackline为什么不知道?当然,如果愿意,您可以将此代码移动到helper方法,但是这里的HashSet没有问题。为什么要用Set包装它?List还有contains
方法。这是真的,但要创建HashSet,首先需要迭代所有List元素。使用List.contains()
进行迭代,直到找到正确的对象。此外,要生成哈希代码,还需要迭代所有字符串。所以在你做O(n)之后,它将类似于O(1)。@Pshemo我知道这一点。但它也涉及哈希代码生成和整数比较与字符串比较。我想这也取决于输入,我还没有对其进行基准测试。在处理与基于哈希的数据结构配合良好的数据结构时,使用HashSet进行contains操作可能只是个人的爱好。只要您必须将不同的字符串与同一组值进行比较,它肯定会得到回报。@Pshemo请参阅我的编辑。收益现在更加明显。当然,这取决于您是否知道要在编译时与之进行比较的字符串集,或者该字符串集是否是动态的,是否也是一次性的。