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检查每个项目,但我正在寻找一种更优雅的方法。
问候,罗恩
- 在发布问题之前是否搜索了StackOverflow?[链接]stackoverflow.com/questions/1128723/…)
将有效方向数组转换为列表:
或者直接声明为:
1
| List valid = Arrays. asList("UP", "DOWN", "RIGHT", "LEFT", "up", "down", "right", "left") |
然后可以使用contains方法:
2
请注意,这与混合大小写输入(如"up")不匹配,因此您可能希望只存储列表中的大写值,然后使用valid.contains(input.toUpperCase())。
- 我更喜欢数组上的foreach,而不是创建新的列表来迭代它…
- 每个人都有问题——谁都不知道为什么Java没有数组?(到parallel list.indexof())。由于字符串数组通常是静态的,所以我发现转换为列表非常烦人,所以我通常编写自己的线性搜索实用程序。
- @用户949300-使用arraylist()。
- 主要是因为泛型和数组不协调。避免使用数组,使用List。
- 不起作用。我创建了一个二维数组,其中每个元素都是"空的"。Arrays.asList(array).contains("EMPTY")返回true,直到某个元素更改为非"空"元素。为什么?数组仍然包含"空"。
- @如果它是一个二维数组,那么它是否包含一个包含"空"而不是"空"本身的数组?如果您仍然有问题,那么用您的代码示例发布一个新的问题。
- @你什么意思?所有数组中的每个元素都是一个字符串"空"。
- 如果您有一个数组数组并使用asList,那么您将得到一个数组的List,因此对字符串的contains检查将不匹配。不管怎样,听起来你的场景和这里最初的问题不同。如果您需要帮助,请用演示问题的代码发布一个新问题。谢谢。
- @ USE94300 Java有一个EDCOX1×5,但是当它期望数组被排序时,数组的大小要快得多。
将数组转换为列表,然后使用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
} |