我在搜索单词的一部分时遇到很多问题,然后让它在之后找到完整的结果。
就像我正在搜索“droid”一样,它通过我的列表查找包含“droid”的任何内容,如果你看下面我的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) {
}
});
}
答案 0 :(得分:0)
正如所建议的那样,使用Regex,据我所知,您必须迭代列表并尝试匹配每个条目。
如果要避免迭代,可以对单词的每个字符(如NGram)使用倒排索引方法。如果要从用户发送的内容开始搜索文本,可以使用Java Map(Commons MultiMap)进行搜索。如果你想通过“droid”搜索,那么你必须索引每个字符的位置并检索相对结果。如果没有像Lucene这样的图书馆,我不建议这样做。