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