【问题标题】: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 检查每个项目,但我正在寻找一种更优雅的方式。

问候,罗恩

【问题讨论】:

标签: java arrays string compare


【解决方案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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-04
          • 1970-01-01
          相关资源
          最近更新 更多