Поиск частичного слова в массиве на андроиде - PullRequest
0 голосов
/ 29 января 2012

У меня много проблем с поиском части слова, а затем с тем, чтобы потом найти полный результат.

Как будто я ищу "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) {
        }
    });

 }

1 Ответ

0 голосов
/ 14 декабря 2013

Как и предполагалось, используя Regex, насколько я знаю, вам придется перебирать список и пытаться сопоставить каждую запись.

Если вы хотите избежать итерации, вы можете использовать метод обратного индекса для каждого символа(как NGram) этого слова.Если вы хотите искать текст, начиная с того, что отправляет пользователь, вы можете сделать это с помощью Java Map (Commons MultiMap).Если вы хотите выполнить поиск по «droid», вам придется индексировать положение каждого символа и получать относительные результаты.Я не рекомендую делать это без такой библиотеки, как Lucene.

...