if(string.equalsIgnoreCase("first") ||
string.equalsIgnoreCase("second") || string.equalsIgnoreCase("third"))
我需要在这里使用10 ||
(我有10个字符串可以检查)。对于这个有任何简单的解决方案。
我需要找到满足的条件。
提前致谢..
答案 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)) {
// ...
}