【问题标题】:Arrays.asList returns falseArrays.asList 返回 false
【发布时间】:2020-06-02 15:51:28
【问题描述】:

我只想检查我的 String[] 数组是否包含“n”或“s”。

String[] coordinatesExample = {"57.8136°s", "28.3496°e"};

private void isContains(String[] coordinates) {

    boolean contains = Arrays.asList(coordinates).contains("s");
        if (contains) {
            System.out.println("It works!");
        }else {
            System.out.println("RAKAMAKAFO");
        }

所以我期望:“它有效!”,但是 事实上:“RAKAMAKAFO”

我做错了什么?

【问题讨论】:

标签: java string arraylist contains


【解决方案1】:

您当前的解决方案只有在您有这样的字符串数组时才有效:

String[] coordinatesExample = {"57.8136°s", "28.3496°e", "s"};

如果您想检查数组中的任何字符串是否包含“n”或“s”,请尝试此操作。

private static void isContains(String[] coordinates) {
    boolean contains = Arrays.stream(coordinates)
            .anyMatch(coordinate -> coordinate.contains("s") || coordinate.contains("n"));
    if (contains) {
        System.out.println("It works!");
    } else {
        System.out.println("RAKAMAKAFO");
    }
}

【讨论】:

    【解决方案2】:

    仅检查列表是否包含s 不是元素之一。

    来自List 接口的JavaDoc

    布尔包含​(Object o)

    如果此列表包含指定元素,则返回 true。更正式地说,当且仅当此列表包含至少一个元素 e 满足 Objects.equals(o, e) 时才返回 true。

    如果您执行以下操作,它将返回 print It works!,因为列表中的 first string 包含 s

    private static void isContains(String[] coordinates) {
    
        boolean contains = Arrays.asList(coordinates).get(0).contains("s");
            if (contains) {
                System.out.println("It works!");
            }else {
                System.out.println("RAKAMAKAFO");
            }
        }
    }
    

    【讨论】:

    • 谢谢,现在我知道了另一种方法和解决方案
    【解决方案3】:

    当您执行Arrays.asList(coordinates) 时,您会得到包含两个项目的列表:57.8136°s28.3496°e。因此,使用.contains("s") 可以测试您的任何项目是否为“s”,这显然不是这种情况。

    【讨论】:

    • 道歉。显然我不知道它是如何工作的。谢谢
    猜你喜欢
    • 2016-10-25
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2015-06-18
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多