String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
我如何可以驗證從stdin
輸入是directions
陣列內或沒有?
我可以做一個循環,並檢查每個項目與input
使用相等,但我正在尋找一個更優雅的方式。
問候,羅恩
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
我如何可以驗證從stdin
輸入是directions
陣列內或沒有?
我可以做一個循環,並檢查每個項目與input
使用相等,但我正在尋找一個更優雅的方式。
問候,羅恩
有效方向上的陣列轉換到一個列表:
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())
我希望foreach on數組,通過創建新的List來迭代它... – dantuch 2012-02-02 00:19:31
每個人的問題 - 任何人有任何想法爲什麼Java沒有Arrays.indexOf()方法? (並行List.indexOf())。由於字符串數組通常是一些靜態的最後的東西,我發現轉換爲List非常煩人,所以我通常寫我自己的小線性搜索工具。 – user949300 2012-02-02 00:22:57
@ user949300 - 使用ArrayList() – 2012-02-02 00:32:22
使用ArrayList
代替其contains
方法
將您的數組轉換爲列表並使用contains方法。
List mylist = Arrays.asList(directions);
mylist.contains(input);
contains方法返回:
如果真正的列表中包含指定的元素。
不幸的是,Java沒有Arrays.indexOf()
方法。最好的辦法是寫一個小工具來做一個簡單的線性搜索。或者您可以轉換爲ArrayList(請參閱Arrays.asList()
)並致電indexOf() or contains()
。
如果數組大,速度是一個問題,你可以在數組進行排序,然後用Arrays.binarySearch().
因爲我們是專門談論的字符串數組,不是任何數組:另一種方法解決了的情況下敏感性問題將會使用正則表達式。通過Pattern類或字符串的matches method。
if (input.matches("(?i)" + String.join("|", directions))) {
// valid
}
else {
// invalid
}
您是否在發佈問題前搜索了計算器? [鏈接] 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