给定:
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
我如何验证从 stdin
输入的内容是否在 directions
数组中?
我可以使用循环并使用 equal
检查每个项目与输入
是否相等,但我正在寻找更优雅的方法。
谢谢,Ron
给定:
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
我如何验证从 stdin
输入的内容是否在 directions
数组中?
我可以使用循环并使用 equal
检查每个项目与输入
是否相等,但我正在寻找更优雅的方法。
谢谢,Ron
将有效方向的数组转换为列表:
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
}
请注意,这不会匹配大小写混合的输入,例如"Up",因此您可能希望仅在列表中存储大写值,然后使用valid.contains(input.toUpperCase())
。
Arrays.asList(array).contains("EMPTY")
返回true,直到一个元素改变为不是“EMPTY”的东西。为什么?数组仍然包含“EMPTY”。 - Erik Humphrey将你的数组转换为列表,然后使用contains方法。
(将数组转换为List之后,可以使用contains方法来判断是否包含某个元素。)List mylist = Arrays.asList(directions);
mylist.contains(input);
ArrayList
及其 contains
方法来代替。不幸的是,Java没有Arrays.indexOf()
方法。最好的办法是编写一个小工具来进行简单的线性搜索。或者您可以将其转换为ArrayList(请参见Arrays.asList()
),然后调用indexOf()或contains()
。
如果数组很大且速度是一个问题,您可以对数组进行排序,然后使用Arrays.binarySearch()
。