java - 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
知道如何解决这个问题。
解决方案
您的站点 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);
}
推荐阅读
- symbolic-math - 在 Maxima 中使用letsimp进行简化,发生了什么?
- unit-testing - 无法测试 Swift_Mailer,因为服务已经初始化或测试。别名被忽略
- node.js - npm 卡在“发现 0 个漏洞”
- php - 使用简单的 html dom 解析图像 src
- terraform - 如何在 terraform 中指定来自不同项目的 gcs 后端
- php - 如何解析这个无格式的 sha 键响应列表?
- amazon-ec2 - EC2 弹性 IP 在 Route 53 中作为“A”类型附加到子域时不受 HTTPS 保护
- mysql - 无法将 SQL Server 数据库导入 phpmyadmin
- sql - 如何将 1 添加到存储过程中插入语句的列值?
- swift - 展开可选 val 时发现 nil