繁体   English   中英

如何过滤我的文本,以便考虑空格?

[英]How do I filter my text so that spaces are taken into account?

我正在为我的应用程序创建一个搜索框,用户可以在其中输入内容,标题将在搜索框下方的recyclerView中返回。 标题在服务器上的php文件中-过滤结果,匹配用户在搜索框中输入的内容。

因此,例如,我的php文件中的标题之一是:

red onions

如果用户键入red ,那么他输入时将显示recyclerView

red cabbage
red mushrooms
red onions

这部分工作正常。

但是,当用户键入red o时, recyclerView中将不会显示任何内容。 实际上,应该出现red onions

我敢肯定这是因为我的应用程序中将php标题分解为单独的单词,所以redonions之间的空格(" ")引起了问题。

知道我该如何解决吗?

我首先将标题拆分为单词的原因是,如果用户键入第二个单词onions ,结果将在recyclerView显示red onions ,而不是什么都没有。

这是我的代码:

      @Override
            public Filter getFilter() {
                return new Filter() {
                    @Override
                    protected FilterResults performFiltering(CharSequence charSequence) {

                        //the text entered in the search box
                        String charString = charSequence.toString();

                        //if searchbox is empty, show the whole list
                        if (charString.isEmpty()) {
                            categoryListFiltered = categoryList;
                        } else {
                            List<Category> filteredList = new ArrayList<>();

                            for (Category row : categoryList) {

                                //split the php title into separate words
                                String[] title_in_php = row.getName().split(" ");

                                //for every split word
                                for (String split_title : title_in_php) {

//if the search term entered is a whole word in the title
                        if (split_title.toLowerCase().startsWith(charString.toLowerCase())) { 

                                        filteredList.add(row);

                                    }
                                }
                            }

                            categoryListFiltered = filteredList;
                        }

                        FilterResults filterResults = new FilterResults();

                        filterResults.values = categoryListFiltered;
                        return filterResults;
                    }

                    @Override
                    protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                        categoryListFiltered = (ArrayList<Category>) filterResults.values;
                        notifyDataSetChanged();
                    }
                };
            }

一旦你进入red o ,它会首先检查red ,它会添加row ,因为与charstring类型开始filteredList red ,但检查o不会增加该row到filteredList因为charstring类型不启动o

尝试一下(基于评论):

if (split_title.toLowerCase().startsWith(charString.toLowerCase())) {
    filteredList.add(row);
}
else if (row.getName().contains(charString.toLowerCase()) {
    if (!filteredList.contains(row)) {
        filteredList.add(row);
    }
}

if用于检查split_title(例如red )-filteredList.add(row);

else if将检查该row包含charString (整个字符串-例如red ocharString (row);

if (!filteredList.contains(row))只是检查行是否已经在列表中。 如果没有,则添加它。 (为避免重复)

另一种方法是拆分charString:

String[] charString= charSequence.toString().split(" ")

并对其进行迭代:

for (int i=0; i<charString.length; i++) {
    for (int n=0; n<title_in_php.length; n++) {
        if (split_title.toLowerCase().startsWith(charString.toLowerCase()) || charString[i].toLowerCase() == title_in_php[n].toLowerCase() || row.getName().contains(charString.toLowerCase()) {
            if (!filteredList.contains(row)) {
                filteredList.add(row);
            }
        }
    }
}

所以它会检查是否charString开头title_in_php 或者如果charString = title_in_php 或者如果row包含charString检查的列表title_in_phpcharString

[红色][红色/洋葱 ]开头 [红色] = [红色/洋葱] [红色洋葱]包含[红色o]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM