首页 > 解决方案 > android检查URL是否包含来自数组的站点名称总是返回false

问题描述

我编写了代码来检查数组是否包含 url

例如Sites_array: [youtube.com]

和像这样的网址https://www.youtube.com/watch?v=xxxxxxxxxx

public boolean check_url(String url){
    sites_array = Arrays.asList(getResources().getStringArray(R.array.Sites_array));
    return sites_array.contains(url);
}

我这样称呼这个方法

EditText search_bar = getCustomActivity().findViewById(R.id.et_search_bar);
String site_url = search_bar.getText().toString();

if(check_url(site_url)){
    Log.d("array",">>>>>contain the url");
}else {
    Log.d("array",">>>>>Not contain the url");
}

但我总是false知道如何解决这个问题。

标签: javaarraysandroid-studio

解决方案


您的站点 url 就像https://www.youtube.com/watch?v=xxxxxxxxxx该数组在表单中有元素,[youtube.com]您正在检查是否[youtube.com]包含https://www.youtube.com/watch?v=xxxxxxxxxx,这将始终是false。您需要反其道而行之,即检查 url 是否包含站点数组中的任何元素。(List.contains检查列表中是否包含该元素。)

您需要更改checkUrl方法如下:

public boolean check_url(String url){
    List<String> sites_array = Arrays.asList(getResources().getStringArray(R.array.Sites_array));
    for(String site : sites_array){
        if(url.contains(site){
            return true;
        }
    }
    return false;
}

如果您使用的是 java 8 或更高版本,那么您可以使用流。

public boolean check_url(String url){
    List<String> sites_array = Arrays.asList(getResources().getStringArray(R.array.Sites_array));
    return sites_array.stream()
                      .anyMatch(site -> url.contains(site));
}

在里面anyMatch你也可以使用url::contains.

public boolean check_url(String url){
    List<String> sites_array = Arrays.asList(getResources().getStringArray(R.array.Sites_array));
    return sites_array.stream()
                      .anyMatch(url::contains);
}

推荐阅读