2012-01-29 24 views
0

我在搜索詞的部分內容後遇到很多問題,然後使其找到完整的結果。在android上搜索arraylist中的部分詞

一樣,如果即時搜索「機器人」,它看起來通過我的列表中任何包含「機器人」,如果你看我的ArrayList它的下面應該找到「Android」的

的ArrayList代碼:

private List<String> getModel() { 
    List<String> list = new ArrayList<String>(); 
    list.add("Linux"); 
    list.add("Windows7"); 
    list.add("Suse"); 
    list.add("Eclipse"); 
    list.add("Ubuntu"); 
    list.add("Solaris"); 
    list.add("Android"); 
    list.add("iPhone"); 
    return list; 
} 

這裏是我的代碼的其餘部分:

public class idchart extends ListActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.idchart);   

    /*Resources res = getResources();   
    ListView listView=(ListView)findViewById(R.id.list);*/ 


    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      android.R.id.text1, 
      getModel()); 
    setListAdapter(adapter); 


    EditText filterEditText = (EditText) findViewById(R.id.srcBox); 
    filterEditText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      adapter.getFilter().filter(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 

} 
+2

基於正則表達式的解決方案將工作。 – RanRag 2012-01-29 00:24:42

+0

我很好奇,如何通過正則表達式搜索列表對象?它沒有內置我知道的功能。 – JoxTraex 2012-01-29 08:27:41

回答

0

至於建議,使用正則表達式,據我所知,你將不得不遍歷列表,並嘗試每個條目匹配。

如果你想避免迭代,你可以對每個字符(如NGram)使用倒排索引方法。如果你想從用戶發送的內容開始搜索文本,你可以用Java Map(Commons MultiMap)來完成。如果你想用「droid」進行搜索,那麼你必須索引每個字符的位置並檢索相關結果。如果沒有像Lucene這樣的庫,我不建議這樣做。