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

How can I verify that an array of strings contain a certain string?

本问题已经有最佳答案,请猛点这里访问。

鉴于:

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

String input ="Up";

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

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

问候,罗恩


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

1
List valid = Arrays.asList(directions)

或者直接声明为:

1
List valid = Arrays.asList("UP","DOWN","RIGHT","LEFT","up","down","right","left")

然后可以使用contains方法:

2

请注意,这与混合大小写输入(如"up")不匹配,因此您可能希望只存储列表中的大写值,然后使用valid.contains(input.toUpperCase())


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

1
2
List mylist = Arrays.asList(directions);
mylist.contains(input);

contains方法返回:

0


不幸的是,Java没有EDCOX1×4的方法。最好的办法是写一个小实用程序来做一个简单的线性搜索。或者,您可以转换为arraylist(参见Arrays.asList())并调用indexOf() or contains()

如果数组很大,速度比较快,可以对数组进行排序,然后使用Arrays.binarySearch().


改用ArrayList及其contains方法


因为我们专门讨论的是字符串数组,而不仅仅是任何数组:另一种优雅地解决不敏感问题的方法是使用正则表达式。通过pattern类或字符串的matches方法。

1
2
3
4
5
6
if (input.matches("(?i)" + String.join("|", directions))) {
    // valid
}
else {
    // invalid
}