检查List <string>是否包含子串

时间:2016-07-20 18:44:33

标签: java android list

我正在开发一个Android应用程序,我从SQLite数据库中获取名称列表(字符串)。然后,我将它们显示在Cardviews列表中。

我还给了一个子字符串,所以我想检查原始List中的任何元素是否包含该子字符串。

我在SQLite查询中使用LIKE时遇到问题,所以我只是用try{ } catch (Exception e) { }修复了它,但我对此感觉不太舒服。

无论如何,由于我最初将所有名称存储在字符串列表中,因此我不需要再次从数据库中获取新名称,我可以在原始的字符串列表中搜索它们。但我不知道如何。

例如,让我们说String of List有这5个元素:

Hello Wall Helicopter Chair Hell

我给了子串Hel。我应该获得HelloHelicopterHell字符串,因为它们都包含子字符串Hel

关于如何实现这一目标的任何想法?

这不是我想以这种方式修复它。我真的想知道什么是最有效的,,如果从数据库中再次检索数据,或者从字符串列表中搜索它。

编辑:我原来说我使用的是CONTAINS查询,但我错过了这个词。我只是想要LIKE查询。我实际上正在使用它,它工作正常,但我真的不知道在我的情况下效率最高。

提前致谢。

2 个答案:

答案 0 :(得分:0)

早上好

这是我的建议

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,则可以将第二种方法的ForLoop替换为:

for(String str: list) {
    if(isSubstring(str, key)) newList.add(str);
}

或简单地说:

list.stream().filter((str) -> (isSubstring(str, key))).forEach((str) -> { newList.add(str); });

答案 1 :(得分:-1)

如果你正在使用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);