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

我需要在||这里使用 10(我有 10 个字符串要检查)。有没有简单的解决方案。

我需要找到满足哪个条件。

提前致谢..

4

5 回答 5

9

您可以使用string.matches()which 接受一个正则表达式,您可以将其强制转换为第一个、第二个、第三个等:

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

或者,为了不区分大小写:

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

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

于 2013-05-29T09:51:57.177 回答
6

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

switch (string.toLowerCase())
{
    case "first": doSomething();
        break;
    case "second": ...;
        break;
    default: ...;
}
于 2013-05-29T09:55:43.560 回答
4

您可能想要使用 aSet<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 个元素来说,这几乎无关紧要。

编辑(学分去沃尔特):

该类TreeSet使用Comparatoronly 来确定相等性,而不是使用equals方法。因此,您可以将混合大小写的字符串放入其中。从类 TreeSet 文档中:

请注意,如果要正确实现 Set 接口,集合维护的顺序(无论是否提供显式比较器)必须与 equals 一致。(参见 Comparable 或 Comparator 以了解与 equals 一致的精确定义。)这是因为 Set 接口是根据 equals 操作定义的,但 TreeSet 实例使用其 compareTo(或 compare)方法执行所有元素比较,所以两个从集合的角度来看,这种方法认为相等的元素是相等的。一个集合的行为是明确定义的,即使它的顺序与equals不一致;它只是不遵守 Set 接口的一般约定。

于 2013-05-29T09:50:11.107 回答
2

您可以使用自己的功能:

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

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

    return false;
}
于 2013-05-29T09:52:36.790 回答
1

这是 Java 8 和流解决方案

String string = "...";

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

if (match.stream().anyMatch(string::equalsIgnoreCase)) {
    // ...
}
于 2018-05-16T06:37:40.407 回答