如何在java中为多个元素使用equalsIgnoreCase()

时间:2013-05-29 09:48:51

标签: java

if(string.equalsIgnoreCase("first") || 
string.equalsIgnoreCase("second") || string.equalsIgnoreCase("third"))

我需要在这里使用10 ||(我有10个字符串可以检查)。对于这个有任何简单的解决方案。

我需要找到满足的条件。

提前致谢..

5 个答案:

答案 0 :(得分:7)

你可以使用string.matches()一个正则表达式,你可以强制进入第一,第二个等等:

if (string.matches("first|second|third"))

或者,对于不区分大小写:

if (string.matches("(?i)first|second|third"))

正则表达式很复杂,但可能是性能问题。

答案 1 :(得分:6)

如果您需要知道哪个匹配为真,那么请使用开关(仅限Java 7):

switch (string.toLowerCase())
{
    case "first": doSomething();
        break;
    case "second": ...;
        break;
    default: ...;
}

答案 2 :(得分:4)

您可能希望使用Set<String>并检查是否包含所需的String

TreeSet<String> values = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);

values.put("first");
values.put("second");
values.put("third");

if (values.contains(string.toLower())) {
}

这适用于对数时间O(log n)),而|| - 方法(理论上在最坏的情况下)是线性的。对于10个元素,它几乎不相关。

编辑(积分转到Walter):

TreeSet类仅使用Comparator来确定相等性,而不是使用equals方法。因此,您可以将混合大小写字符串放入其中。来自Class TreeSet documentation

  

注意由一组维护的排序(无论是否显式   比较器提供)必须与equals一致,如果是的话   正确实现Set接口。 (参见可比较者或比较者   对于与equals一致的精确定义。)就是这样   因为Set接口是根据equals操作定义的,   但是TreeSet实例使用它执行所有元素比较   compareTo(或compare)方法,因此两个被认为相等的元素   从该集合的角度来看,通过这种方法是相等的。该   集合的行为即使其排序不一致也是明确定义的   与...平等它只是没有遵守集合的一般合同   接口

答案 3 :(得分:2)

你可以使用自己的功能:

equalsIgnoreCase("string", "first", "second");

public boolean equalsIgnoreCase(String needle, String... haystack) {
    foreach(String s : haystack) {
        if(needle.equalsIgnoreCase(s)) {
            return true;
        }
    }

    return false;
}

答案 4 :(得分:0)

这是Java 8和流解决方案

String string = "...";

List<String> match = Arrays.asList("first", "second", "third", "...");

if (match.stream().anyMatch(string::equalsIgnoreCase)) {
    // ...
}