2010-08-26 82 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

相關問題