Java - 在字符串数组中搜索字符串[重复]
Posted
技术标签:
【中文标题】Java - 在字符串数组中搜索字符串[重复]【英文标题】:Java - search a string in string array [duplicate] 【发布时间】: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) 表现更好的方法? 只是为了代码的外观。我知道任何方法都会执行循环但对用户隐藏它。 【参考方案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");
【讨论】:
以上是关于Java - 在字符串数组中搜索字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章
java中去掉字符串数组中重复的字符串(不改变原有顺序)并计数(不同的字符串重复了多少次)