2012-02-02 132 views
21

考慮:如何驗證字符串數組是否包含某個字符串?

String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"}; 

String input = "Up"; 

我如何可以驗證從stdin輸入是directions陣列內或沒有?

我可以做一個循環,並檢查每個項目與input使用相等,但我正在尋找一個更優雅的方式。

問候,羅恩

+1

您是否在發佈問題前搜索了計算器? [鏈接] http://stackoverflow.com/questions/1128723/in-java-how-can-i-test-if-an-array-contains-a-certain-value) – eternaln00b 2012-02-02 00:19:39

回答

38

有效方向上的陣列轉換到一個列表:

List valid = Arrays.asList(directions) 

,或直接將它聲明爲:

List valid = Arrays.asList("UP", "DOWN", "RIGHT", "LEFT", "up", "down", "right", "left") 

然後,您可以使用contains方法:

if (valid.contains(input)) { 
    // is valid 
} else { 
    // not valid 
} 

請注意,這不會混合的情況下,輸入相匹配,如「向上」,所以你可能希望只存儲在列表中的大寫值,然後使用valid.contains(input.toUpperCase())

+0

我希望foreach on數組,通過創建新的List來迭代它... – dantuch 2012-02-02 00:19:31

+0

每個人的問題 - 任何人有任何想法爲什麼Java沒有Arrays.indexOf()方法? (並行List.indexOf())。由於字符串數組通常是一些靜態的最後的東西,我發現轉換爲List非常煩人,所以我通常寫我自己的小線性搜索工具。 – user949300 2012-02-02 00:22:57

+0

@ user949300 - 使用ArrayList() – 2012-02-02 00:32:22

3

使用ArrayList代替其contains方法

5

將您的數組轉換爲列表並使用contains方法。

List mylist = Arrays.asList(directions); 
mylist.contains(input); 

contains方法返回:

如果

真正的列表中包含指定的元素。

3

不幸的是,Java沒有Arrays.indexOf()方法。最好的辦法是寫一個小工具來做一個簡單的線性搜索。或者您可以轉換爲ArrayList(請參閱Arrays.asList())並致電indexOf() or contains()

如果數組大,速度是一個問題,你可以在數組進行排序,然後用Arrays.binarySearch().

0

因爲我們是專門談論的字符串數組,不是任何數組:另一種方法解決了的情況下敏感性問題將會使用正則表達式。通過Pattern類或字符串的matches method

if (input.matches("(?i)" + String.join("|", directions))) { 
    // valid 
} 
else { 
    // invalid 
} 
相關問題