如何验证字符串数组是否包含某个字符串?

时间:2012-02-02 00:12:30

标签: java arrays string compare

鉴于:

String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};

String input = "Up";

如何验证stdin的输入是否在directions数组中?

我可以制作一个循环并使用相等的input检查每个项目,但我正在寻找一种更优雅的方式。

的问候,罗恩

5 个答案:

答案 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
}