鉴于:
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
如何验证stdin
的输入是否在directions
数组中?
我可以制作一个循环并使用相等的input
检查每个项目,但我正在寻找一种更优雅的方式。
的问候,罗恩
答案 0 :(得分:47)
将有效路线数组转换为列表:
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())
答案 1 :(得分:5)
将数组转换为List,而不是使用contains方法。
List mylist = Arrays.asList(directions);
mylist.contains(input);
contains方法返回:
如果列表包含指定的元素,则为true。
答案 2 :(得分:3)
使用ArrayList
代替其contains
方法
答案 3 :(得分:3)
不幸的是,Java没有Arrays.indexOf()
方法。最好的办法是编写一个小工具来进行简单的线性搜索。或者您可以转换为ArrayList(请参阅Arrays.asList()
)并致电indexOf() or contains()
。
如果数组很大并且速度是一个问题,您可以对数组进行排序,然后使用Arrays.binarySearch().
答案 4 :(得分:0)
因为我们专门讨论字符串数组,而不仅仅是任何数组:另一种优雅地解决不区分大小写问题的方法是使用正则表达式。通过Pattern类或字符串' matches method。
if (input.matches("(?i)" + String.join("|", directions))) {
// valid
}
else {
// invalid
}