2016-07-20 73 views
-1

我正在開發一個Android應用程序,我從SQLite數據庫中獲取名稱列表(字符串)。然後,我將它們顯示在Cardview列表中。檢查是否列表<String>包含子字符串

我也給了一個子字符串,所以我想檢查一下原始列表中的任何元素是否包含該子字符串。

我在使用SQLite查詢中使用LIKE時遇到問題,所以我剛剛使用try{ } catch (Exception e) { }修復了它,但我不太滿意它。

無論如何,因爲我原本擁有存儲在字符串列表中的所有名稱,所以我不需要再從數據庫中提取新的名稱,我可以在原始的字符串列表中搜索它們。但我不知道如何。

例如,假設字符串的列表中包含了這5個元素:

Hello Wall Helicopter Chair Hell

而且我給出的子Hel。我應該得到Hello,HelicopterHell字符串,因爲它們都包含子字符串Hel

關於如何實現此目標的任何想法?

這不是我想要這樣修復它。我衷心希望知道什麼是最有效的,如果從數據庫中再次檢索數據,或者從字符串列表中搜索數據,最有效的方法是

編輯:我最初說我正在使用CONTAINS查詢,但我錯過了這個詞。我只是指LIKE查詢。我實際上使用它,它工作正常,但我不知道什麼是最有效的在我的情況。

在此先感謝。

+2

使用LIKE查詢 –

+0

我的錯。我實際上使用LIKE查詢。當我說包含時,我錯過了這個詞。我編輯了答案。 –

+0

[在List.contains(String)]的情況下部分匹配字符串(http:// stackoverflow。com/questions/6645379/partial-match-strings-in-case-of-list-containsstring) –

回答

-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); 
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工作,就可以更換第二個方法的for循環爲:

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

或簡稱爲:

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