gpt4 book ai didi

java - 如何过滤我的文本以便将空格考虑在内?

转载 作者:行者123 更新时间:2023-11-29 18:58:21 25 4
gpt4 key购买 nike

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

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

red onions

如果用户键入 redrecyclerView 会在他键入时显示:

red cabbage
red mushrooms
red onions

这部分工作正常。

但是当用户键入 red o 时,recyclerView 中什么也没有显示。而事实上,red onions 应该出现。

我确定会发生这种情况,因为在我的应用程序中,我将 php 标题分成单独的词,因此 red 之间的空格 ("") >onions 导致了问题。

知道如何解决这个问题吗?

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

这是我的代码:

      @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到filteredList,因为charString以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 o) - filteredList.add(行);

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 OR 如果 charString = title_in_php OR 如果 row 包含 charString 检查每个 charStringtitle_in_php 列表/p>

[red][red/onion] 开头 OR [red] = [ red/onion] [red onion] 包含[red o]

关于java - 如何过滤我的文本以便将空格考虑在内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com