如何验证一个字符串数组是否包含特定的字符串?

34

给定:

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

String input = "Up";

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

我可以使用循环并使用 equal 检查每个项目与输入是否相等,但我正在寻找更优雅的方法。

谢谢,Ron


1
在发布问题之前,你有在 Stack Overflow 上搜索过吗?[链接]https://dev59.com/eXNA5IYBdhLWcg3wAI3d) - eternaln00b
5个回答

61

将有效方向的数组转换为列表:

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())


4
我更喜欢使用foreach遍历数组,而不是创建新的List来进行迭代... - dantuch
大家好,有没有人知道为什么Java没有Arrays.indexOf()方法(与List.indexOf()并行)?由于字符串数组通常是一些静态的final东西,我发现将其转换为List非常麻烦,因此我通常会编写自己的小型线性搜索实用程序。 - user949300
不起作用。我创建了一个二维数组,其中每个元素都是“EMPTY”。Arrays.asList(array).contains("EMPTY")返回true,直到一个元素改变为不是“EMPTY”的东西。为什么?数组仍然包含“EMPTY”。 - Erik Humphrey
@ErikHumphrey 如果它是一个二维数组,那么它是否包含一个包含“EMPTY”的数组,而不仅仅是“EMPTY”本身?如果你仍然有困难,那么请发布一个带有你代码示例的新问题。 - mikej
@mikej 你的意思是什么?所有数组中的每个元素都是字符串“EMPTY”。 - Erik Humphrey
显示剩余4条评论

6

将你的数组转换为列表,然后使用contains方法。

(将数组转换为List之后,可以使用contains方法来判断是否包含某个元素。)
List mylist = Arrays.asList(directions);
mylist.contains(input);

contains方法返回:
如果列表包含指定元素,则返回true。

3
请使用 ArrayList 及其 contains 方法来代替。

3

不幸的是,Java没有Arrays.indexOf()方法。最好的办法是编写一个小工具来进行简单的线性搜索。或者您可以将其转换为ArrayList(请参见Arrays.asList()),然后调用indexOf()或contains()

如果数组很大且速度是一个问题,您可以对数组进行排序,然后使用Arrays.binarySearch()


0

由于我们特别讨论的是字符串数组,而不仅仅是任何数组:另一种优雅地解决大小写敏感问题的方法是使用正则表达式。可以通过Pattern类或String的matches方法来实现。

if (input.matches("(?i)" + String.join("|", directions))) {
    // valid
}
else {
    // invalid
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接