簡體   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