2010-08-26 69 views
31

好吧,假设我有一个填充{“tube”,“are”,“fun”}的数组,然后我有一个JTextField,如果我键入其中一个命令做一些事情,如果没有得到像“命令未找到”的消息。查找字符串是否存在于一个数组中

我试过看Java文档,但我所得到的是我不想要的东西像问题和东西......所以,这是如何完成的?我知道有一个“数组”功能,但我并不太善于将两者结合在一起。

谢谢。

这里是我到目前为止有:

String[] dan = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 
boolean contains = dan.contains(say.getText()); 

,但我越来越找不到dan.contains符号

回答

55

这是你在找什么:

List<String> dan = Arrays.asList("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"); 

boolean contains = dan.contains(say.getText()); 

如果你有一个列表不重复值,更喜欢使用Set<String>其中有相同的contains方法

+0

是的!看我的例子。 :D – nn2 2010-08-26 04:06:46

+0

这是因为一个数组不是一个集合 – 2010-08-26 04:09:22

+0

@Dan - BZZZT - 你试图在数组上调用'contains',而不是'Set'! – 2010-08-26 04:10:47

1

如果可以按排序顺序组织数组中的值,则可以使用Arrays.binarySearch()。否则,你将不得不编写一个循环和一个线性搜索。如果您打算在数组中使用大量(多于几十个)字符串,请考虑使用Set来代替。

+0

呃,如果我说这个数组将会是有保证的,而且根本没有改变,那么它会影响吗?会有比这更简单的方法吗? – nn2 2010-08-26 04:09:05

+0

@丹 - 我认为他的第一句话回答了这个问题。你知道如何手工排序字符串,不是吗? – 2010-08-26 04:14:33

+0

@Jim,这个答案是不正确的。 '#binarySearch'的文档明确指出:“如果数组包含不可相互比较的元素(例如字符串和整数),则不能根据元素的自然顺序排序,因此结果是不确定的。” *不要在'Integer'或'String'上使用'binarySearch',或者至多可以有部分顺序的元素。 – 2017-01-18 07:54:37

28
String[] a= {"tube", "are", "fun"}; 
Arrays.asList(a).contains("any"); 
+0

谢谢...很好的例子 – Antonio 2013-11-07 11:22:54

+0

这就是我正在寻找的。简单! – 2015-05-19 18:37:06

7

使用Arrays.asList()包裹所述阵列中的List<String>,这确实有contains()方法:

Arrays.asList(dan).contains(say.getText()) 
1

这可以在Java 8中使用流来完成。

import java.util.stream.Stream; 

String[] stringList = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 

boolean contains = Stream.of(stringList).anyMatch(x -> x.equals(say.getText()); 
+1

这是最好的答案。其他人失败,因为'asList'返回非参数化泛型。 – 2018-01-23 18:13:34

相关问题