【发布时间】:2011-04-03 17:12:53
【问题描述】:
我想知道在 Java 中是否有这样的方法:
if(word in stringArray) {
...
}
我知道我可以为此创建一个函数,但我只想知道 Java 是否已经为此提供了一些功能。
谢谢!
【问题讨论】:
-
请告诉我们
stringArray的类型。
我想知道在 Java 中是否有这样的方法:
if(word in stringArray) {
...
}
我知道我可以为此创建一个函数,但我只想知道 Java 是否已经为此提供了一些功能。
谢谢!
【问题讨论】:
stringArray的类型。
没有数组:
public static <T> boolean in(T value, T... list) {
for (T item : list) {
if (value.equals(item))
return true;
}
return false;
}
用法:
int val = 1;
assert in(val, 1,2,3,4);
【讨论】:
在 SQL 中
x in ('Alice', 'Bob', 'Carol')
在 Java 中:
Arrays.asList("Alice", "Bob", "Carol").contains(x)
【讨论】:
tabs[j].indexOf("lelamondeestgrand...")!=0
【讨论】:
您可以将 java.util.Collection.contains() 用于集合。如果你有一个非空数组,你可以使用 java.util.Arrays.asList(array).contains()。
【讨论】:
Java 语言的设计既强大又简单。 Java 在语言级别上没有这样的运算符,但肯定已经编写了库来促进这样的查询。
如果您想知道某个对象是否是某个对象集的成员,那么您应该使用 -- 还有什么? -- Set,而不是数组。这些数据结构自然允许此类查询,更好的是,它们针对此类查询进行了优化。
您可以像这样轻松检查给定字符串是否在 Set<String> 中:
String[] arr = { "Alice", "Bob", "Carol" };
Set<String> names = new HashSet<String>(Arrays.asList(arr));
System.out.println(names.contains("Alice")); // true
System.out.println(names.contains("Dean")); // false
使用HashSet、contains 是一个常数时间操作。这比通过数组进行线性搜索要好得多。
您应该熟悉 Java 集合框架为您提供的数据结构。它们使您可以编写惯用的、可维护的、灵活的代码,并得到这些数据结构可用的许多强大算法的支持。
【讨论】:
它首先取决于数组是什么数组。如果它是精确单词的数组,您可以将其转换为常规集合并使用 contains() 方法。如果它是一组句子或短语等,则必须对其进行迭代才能分辨。
捕获所有这些的最通用的解决方案是如下迭代。
for(String s : stringArray)
{
if(s.indexOf(word) > 0) return true;
}
return false;
这会查看数组中的每个字符串,并检查单词是否包含在其中的任何位置。找到第一次出现后返回true。
【讨论】:
请向我们详细说明您的问题是什么样的,以及您需要检查的内容。有几种不同的方法可以做这样的事情。如果您需要继续询问项目 A 是否在集合 B.. 将集合 B 设为 HashSet,您可以非常快速地调用包含。您可以通过几种 java-ish 方式获得相同的效果,但它们会根据您的数据等而有所不同。
【讨论】:
有很多集合可以让你做类似的事情。例如:
与Strings:
String s = "I can has cheezeburger?";
boolean hasCheese = s.contains("cheeze");
List<String> listOfStrings = new ArrayList<String>();
boolean hasString = listOfStrings.contains(something);
但是,对于简单的String[],没有类似的构造。
【讨论】:
O(n) 对你来说很慢,那就很慢了。但是,它将与数组的任何 contains 方法一样快。
O(n) stinks。
String[],你可以使用Arrays.asList(array).contains(element);。
if(myArrayList.contains("hello"))
{
// yay
}
【讨论】:
如果数组已排序,则可以使用Arrays.binarySearch查找数据。
像这样:
if (Arrays.binarySearch(stringArray, word)>=0) {
// word found in the array.
}
如果数组未排序,commons lang 有ArrayUtils.indexOf 方法。
最后,如果您正在搜索大型数组,那么使用来自 JSR166 的 ParallelArray 进行并行搜索可能是值得的 - 来自 Java SE 7,现在可以下载。 This article做介绍。
【讨论】:
Java 没有“in”运算符。
对于数组,您需要对其进行迭代并查找匹配项。
对于列表,您可以使用contains 方法。
【讨论】:
Arrays.binarySearch() 有帮助