【问题标题】:Java - search a string in string array [duplicate]Java - 在字符串数组中搜索字符串[重复]
【发布时间】:2016-11-15 00:14:29
【问题描述】:

在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
   }

【问题讨论】:

  • 有什么问题
  • 令人难以置信的懒惰问题,0 研究工作...
  • 不确定你是否知道 SO 是什么
  • 您想避免循环,因为您认为它很难看吗?或者是因为你想要一种比 O(n) 表现更好的方法?
  • 只是为了代码的外观。我知道任何方法都会执行循环但对用户隐藏它。

标签: java arrays


【解决方案1】:

此代码将为您工作:

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
}

【讨论】:

  • 这行不通。你必须在循环内设置一个布尔值或计数,然后在循环外我可以检查该变量来做某事。但我想避免循环。
  • 如果数组中不存在该值,OP想要做其他事情,而不是数组中不是该值的每个元素一次。
  • 然后你可以在循环中使用一个用0初始化的变量,看看它是否与任何字符串匹配。并在循环外检查变量是否不为 0,然后执行其他操作...
  • 那么答案应该反映出这一点,@VatsalSura。也许你可以编辑它?
  • if (count == true) // 冗余,if (count)
【解决方案2】:

执行以下操作:

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

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

示例:

if(Arrays.asList(myArray).contains(x)){
    // is present ... :)
}

从 Java8 开始,有一种方法可以使用流来查找:

boolean found = Arrays.stream(myArray).anyMatch(x::equals);
if(found){
    // is present ... :)
}

【讨论】:

  • 我认为重要的是要注意,这并不能消除检查array 中的每个元素以查看它是否与x 匹配,它只是对程序员隐藏了这项工作。不是敲这个答案。人们应该意识到,仅此而已。
  • 并考虑创建一个 ArrayList 对象只是为了搜索字符串。
  • 这会影响性能 - 如果您担心性能
  • 此解决方案在 SonarQube 中引发严重代码异味,因为“如果集合很大,对 'contains()' 的调用可能是性能热点。”
【解决方案3】:

您还可以使用来自 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");
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 2018-12-01
    • 2011-07-04
    • 2018-06-23
    • 2013-05-25
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多