2012-02-02 83 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 
} 
相关问题