[英]Check if List <String> contains substring
我正在开发一个 Android 应用程序,我从 SQLite 数据库中获取名称列表(字符串)。 然后,我将它们显示在 Cardviews 列表中。
我还得到了一个 substring,所以我想检查原始列表的任何元素是否包含 substring。
我在 SQLite 查询中使用 LIKE 时遇到问题,所以我只是用try{ } catch (Exception e) { }
修复了它,但我对此不太满意。
无论如何,由于我最初将所有名称都存储在字符串列表中,所以我真的不需要再次从数据库中提取新名称,我可以在原始字符串列表中搜索它们。 但我不知道怎么办。
例如,假设字符串列表有这 5 个元素:
Hello
Wall
Helicopter
Chair
Hell
我得到了 substring Hel
。 我应该得到Hello
、 Helicopter
和Hell
字符串,因为它们都包含 substring Hel
。
关于如何实现这一目标的任何想法?
并不是我想这样修复它。 我真诚地想知道什么是最有效的,如果从数据库中再次检索数据,或者从字符串列表中搜索它。
编辑:我最初说我正在使用 CONTAINS 查询,但我错过了这个词。 我只是指 LIKE 查询。 我实际上正在使用它,它工作正常,但我真的不知道在我的情况下什么是最有效的。
提前致谢。
这是我的建议
public boolean isSubstring(String str, String key) {
if(key.length() > str.length()) return false;
for(int i = 0; i <= str.length() - key.length(); i++) {
if( key.equals(str.substring(i, i + key.length())) ) return true;
}
return false;
}
public List<String> findStings(List<String> list, String key) {
List<String> newList = new ArrayList<>();
for(int i = 0; i < list.size(); i++) {
if(isSubstring(list.get(i), key)) {
newList.add(list.get(i));
}
}
return newList;
}
如果您使用的是 Java 8,则可以将第二种方法的 for 循环替换为:
for(String str: list) {
if(isSubstring(str, key)) newList.add(str);
}
或者简单地作为:
list.stream().filter((str) -> (isSubstring(str, key))).forEach((str) -> { newList.add(str); });
如果您使用的是 Java 8:
List<String> filteredList = myList.stream().filter(s -> s.contains("Hel")).collect(Collectors.toList());
如果您之前使用过任何东西,请for
每个循环使用一个:
List<String> filteredList = new ArrayList<String>();
for(String s : myList)
if(s.contains("Hel")
filteredList.add(s);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.