Java 如何在数组中搜索并在ListView中显示?

Java 如何在数组中搜索并在ListView中显示?,java,android,regex,listview,Java,Android,Regex,Listview,以下是我在Android Studio中的Java代码。GUI布局包含一个编辑文本,在其中输入一个单词,然后单击搜索按钮。之后,它将显示数组中匹配的单词(包含单词),并在listView中显示这些单词。实现从数组中提取匹配正则表达式,然后在listView中逐项显示的功能;我需要关于如何在Finder函数中实现它的想法 例1: 一系列单词:“灰尘”、“垃圾”、“推力”、“人”、“等级”、“鼹鼠”、“税” 输入:ust listView中的输出: 项目1:粉尘 项目2:推力 package com

以下是我在Android Studio中的Java代码。GUI布局包含一个编辑文本,在其中输入一个单词,然后单击搜索按钮。之后,它将显示数组中匹配的单词(包含单词),并在listView中显示这些单词。实现从数组中提取匹配正则表达式,然后在listView中逐项显示的功能;我需要关于如何在Finder函数中实现它的想法

例1:

一系列单词:“灰尘”、“垃圾”、“推力”、“人”、“等级”、“鼹鼠”、“税”

输入:ust

listView中的输出:

项目1:粉尘

项目2:推力

package com.neatsoft.hamqafia;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;



public class MainActivity extends AppCompatActivity {
    EditText textBar;
    Button findBtn;
    ListView listView;





   String words[] = {"Dust", "Duff", "Thrust", "Man", "Grade", "Mole", "Tax"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private void Init(){
        textBar = (EditText)   findViewById(R.id.editText);
        findBtn = (Button) findViewById(R.id.button);
        listView = (ListView) findViewById(R.id.listView);
    }

    private void Finder(String toFind){
        //Store Array in Trie Datastructure and then find toFind keyword and show the results item by item in listView
          ///OR create regex search by any other datastructure or methodology
    }
}

单击“搜索”按钮时。您可以使用字符串str1.toLowerCase().contains(str2.toLowerCase())搜索列表项中的文本,并将包含搜索键的字符串保存在另一个列表或数组中。然后使用搜索列表项将数据重新加载到listview

注意:您可以使用另一个按钮(清除搜索),单击该按钮时,将searchlist变量指定给初始列表并重新加载数据。(无搜索案例)

private void Finder(字符串toFind){
if(searchList==null){
searchList=newarraylist();
}
searchList.clear();
if(toFind!=null | |!toFind.trim().equals(“”){
for(字符串str:words){
if(str.toLowerCase().contains(toFind.toLowerCase()))
searchList.add(str);
}
}
notifyDataToListView();
}
私有void notifyDataToListView(){
if(适配器==null){
适配器=新的BaseAdapter(){
@凌驾
public int getCount(){
返回searchList==null?0:searchList.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=新文本视图(getApplicationContext());
}
((TextView)convertView.setText(searchList.get(position));
返回null;
}
};
myListView.setAdapter(适配器);
}否则{
adapter.notifyDataSetChanged();
}
}

像这样。全局定义BaseAdapter对象。

请举个例子来解释它,这样就足够了吗?
private void Finder(String toFind){

    if(searchList == null) {
        searchList = new ArrayList<>();
    }
    searchList.clear();

    if(toFind != null || !toFind.trim().equals("")) {
        for(String str : words) {
            if(str.toLowerCase().contains(toFind.toLowerCase()))
                searchList.add(str);
        }
    }
    notifyDataToListView();
}

private void notifyDataToListView() {
    if(adapter == null) {
        adapter = new BaseAdapter() {
            @Override
            public int getCount() {
                return searchList == null ? 0 : searchList.size();
            }

            @Override
            public Object getItem(int position) {
                return null;
            }

            @Override
            public long getItemId(int position) {
                return 0;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                if(convertView == null) {
                    convertView = new TextView(getApplicationContext());
                }
                ((TextView) convertView).setText(searchList.get(position));
                return null;
            }
        };
        myListView.setAdapter(adapter);
    }else {
        adapter.notifyDataSetChanged();
    }
}