如何验证字符串数组是不是包含某个字符串? [复制]

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

【讨论】:

以上是关于如何验证字符串数组是不是包含某个字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]

如何检查arraylist中的数组是不是包含某个值?

如何检查字符串是不是包含字母表中的所有字母? [复制]

JQuery如何判断值中是不是包含某个值?

判断字符串中是不是包含某个字符串

如何判断List<String>list中是不是包含某个字符串