如何验证字符串数组是不是包含某个字符串? [复制]
Posted
技术标签:
【中文标题】如何验证字符串数组是不是包含某个字符串? [复制]【英文标题】:How can I verify that an array of strings contain a certain string? [duplicate]如何验证字符串数组是否包含某个字符串? [复制] 【发布时间】:2012-02-24 16:42:14 【问题描述】:给定:
String[] directions = "UP","DOWN","RIGHT","LEFT","up","down","right","left";
String input = "Up";
如何验证来自stdin
的输入是否在directions
数组中?
我可以使用 equal 创建一个循环并使用 input
检查每个项目,但我正在寻找一种更优雅的方式。
问候,罗恩
【问题讨论】:
你在发布问题之前搜索过***吗? [链接]***.com/questions/1128723/…) 【参考方案1】:将有效方向数组转换为列表:
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())
【讨论】:
我更喜欢数组上的 foreach,而不是创建新的 List 来迭代它...... 每个人的问题 - 任何人都知道为什么 Java 没有 Arrays.indexOf() 方法? (到并行 List.indexOf())。由于字符串数组通常是一些静态的最终结果,我发现转换为列表非常烦人,所以我通常编写自己的小型线性搜索实用程序。 @user949300 - 使用 ArrayList() 主要是因为泛型和数组不能相处。避免使用数组,使用List
。
不起作用。我创建了一个二维数组,其中每个元素都是“空的”。 Arrays.asList(array).contains("EMPTY")
返回 true,直到一个元素变为非“EMPTY”。为什么?该数组仍然包含“EMPTY”。【参考方案2】:
将您的数组转换为列表,然后使用contains 方法。
List mylist = Arrays.asList(directions);
mylist.contains(input);
contains 方法返回:
如果列表包含指定元素则为真。
【讨论】:
【参考方案3】:不幸的是,Java 没有Arrays.indexOf()
方法。最好的办法是编写一个小实用程序来进行简单的线性搜索。或者您可以转换为 ArrayList(参见 Arrays.asList()
)并调用 indexOf() or contains()
。
如果数组很大并且速度很重要,您可以对数组进行排序,然后使用Arrays.binarySearch().
【讨论】:
【参考方案4】:改用ArrayList
及其contains
方法
【讨论】:
【参考方案5】:由于我们专门讨论的是字符串数组,而不仅仅是任何数组:另一种优雅地解决不区分大小写问题的方法是使用正则表达式。通过Pattern 类或字符串的matches method。
if (input.matches("(?i)" + String.join("|", directions)))
// valid
else
// invalid
【讨论】:
以上是关于如何验证字符串数组是不是包含某个字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章