繁体   English   中英

检查是否列表<string>包含 substring</string>

[英]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 我应该得到HelloHelicopterHell字符串,因为它们都包含 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM