Java - 在字符串数组中搜索字符串

26
在Java中,我们是否有任何方法可以查找特定字符串是否为字符串数组的一部分。我可以用循环来完成,但我想避免这种情况。
例如:
String [] array = {"AA","BB","CC" };
string x = "BB"

我希望您能为我翻译

if (some condition to tell whether x is part of array) {
      do something
   } else {
     do something else
   }

你想避免循环是因为你认为它丑陋吗?还是因为你想找到一种比O(n)更高效的方法来完成它? - Erick G. Hagstrom
1
只是为了代码的外观而已。我知道任何方法都会将循环隐藏在用户背后。 - Hari M
3个回答

59

做类似这样的事情:

Arrays.asList(array).contains(x);

如果字符串x存在于数组(现已转换为列表)中,则返回true。

示例:

if(Arrays.asList(myArray).contains(x)){
    // is present ... :)
}
自Java8以来,使用流(streams)可以找到这种方式:
boolean found = Arrays.stream(myArray).anyMatch(x::equals);
if(found){
    // is present ... :)
}

7
我认为重要的是要注意,这并没有消除检查array中每个元素是否与x匹配的步骤,它只是将这个工作隐藏在程序员的背后。这不是针对这个答案的批评,人们应该意识到这一点。 - Erick G. Hagstrom
3
考虑到这会创建一个ArrayList对象来搜索一个字符串。 - David Bradley
2
这会影响性能 - 如果你担心性能 - avijendr
此解决方案在SonarQube中引发了严重的代码异味,提示为“如果集合很大,则对'contains()'的调用可能是性能热点。” - Haripriya

10

您还可以使用来自Apache的commons-lang库,该库提供了备受赞赏的方法contains

import org.apache.commons.lang.ArrayUtils;

public class CommonsLangContainsDemo {

    public static void execute(String[] strings, String searchString) {
        if (ArrayUtils.contains(strings, searchString)) {
            System.out.println("contains.");
        } else {
            System.out.println("does not contain.");
        }
    }

    public static void main(String[] args) {
        execute(new String[] { "AA","BB","CC" }, "BB");
    }

}

4
这段代码适用于您:
bool count = false;
for(int i = 0; i < array.length; i++)
{
    if(array[i].equals(x))
    {
        count = true;
        break;
    }
}
if(count)
{
    //do some other thing
}
else
{
    //do some other thing
}

1
这样是行不通的。你必须在循环内设置一个布尔值或计数器,然后在循环外我可以检查该变量来执行某些操作。但是我想避免使用循环。 - Hari M
如果数组中不存在该值,则OP希望执行其他操作,而不是对不是该值的每个元素执行一次。 - azurefrog
然后你可以在循环中使用一个初始化为0的变量,并查看它是否与任何字符串匹配。并且在循环外检查变量是否不为0,如果是,则执行其他操作... - VatsalSura
if (count == true) // 冗余,可以简写为 if (count) - Matthew Smith
@ErickG.Hagstrom 完成了。事实上,当您发表评论时我正在进行编辑。 - VatsalSura
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接