2016-07-20 34 views
-1

私はSQLiteデータベースから名前のリスト(文字列)を取得するAndroidアプリケーションを開発しています。それから、Cardviewのリストにそれらを表示します。リスト<String>にサブ文字列が含まれていないか確認してください

私はまた、部分文字列も与えられています。元のリストのどの要素にもその部分文字列が含まれているかどうかチェックしたいと思います。

SQLiteクエリでLIKEを使用する際に問題が発生しています。そのため、try{ } catch (Exception e) { }で修正しましたが、それほど快適ではありません。

とにかく、私はもともと文字列のリストに格納されている名前のすべてを持っているので、私は実際にはデータベースから新しい文字列を再度取得する必要はなく、元のList of Stringsで検索することができます。しかし、私はどのように知りません。

たとえば、のは、文字列のリストは、この5つの要素を持っているとしましょう:

Hello Wall Helicopter Chair Hell

そして私はサブHelを与えられています。 HelloHelicopter、およびHellの文字列はすべてサブ文字列Helを含んでいるため、取得する必要があります。

どのようにこの目標を達成するためのアイデアですか?

このように修正したいのではありません。データベースからデータを再度取得する場合、が最も効率的であるか、または文字列のリストから検索する場合は、が最も効率的です。

編集:私は最初にCONTAINSクエリを使用していたと言いましたが、私はその言葉を逃しました。私はちょうどLIKEクエリを意味しました。私は実際にそれを使用しています、それはうまく動作しますが、私は本当に私の場合で最も効率的であるか分からない。

ありがとうございます。

+2

LIKEクエリ –

+0

私の障害を使用してください。私は実際にLIKEクエリを使用しています。私は含まれていると言いました。私は答えを編集しました。 –

+0

[List.contains(String)の場合は部分一致文字列](http:// stackoverflow。com/questions/6645379 /部分一致文字列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で作業している場合は、ように、第2の方法のForLoopを置き換えることができます。

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

または単に:

list.stream().filter((str) -> (isSubstring(str, key))).forEach((str) -> { newList.add(str); }); 
関連する問題