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()

  • 如果您使用的是JDK 1.7,则可以使用
    开关
    语句:

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

    if (substr.matches("move|mov|mv") {
        //...
    }
    

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

  • 使用
    Set
    保存所有可能的匹配项,并在if statmeent中使用
    Set.contains()

  • 如果您使用的是JDK 1.7,则可以使用
    开关
    语句:

    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请参阅我的编辑。收益现在更加明显。当然,这取决于您是否知道要在编译时与之进行比较的字符串集,或者该字符串集是否是动态的,是否也是一次性的。