Java 我想从Android语句中搜索带有空格的特定单词

Java 我想从Android语句中搜索带有空格的特定单词,java,android,Java,Android,我想在通过启动api得到的列表中进行搜索 我目前正在使用indexof进行搜索,但若我在word之后提供空间,它将进行搜索,但列表未正确更新 例如: 我是名单1中的两个记录。Qtlist和use2。安卓 如果我搜索,然后它只能显示1。但它显示了1,2.两者都有 我的职能 private ArrayList<BusinessDetails> GetSearchAdapterData(String searchKeyword) { final ArrayLi

我想在通过启动api得到的列表中进行搜索

我目前正在使用indexof进行搜索,但若我在word之后提供空间,它将进行搜索,但列表未正确更新

例如: 我是名单1中的两个记录。Qtlist和use2。安卓 如果我搜索,然后它只能显示1。但它显示了1,2.两者都有

我的职能

  private ArrayList<BusinessDetails> GetSearchAdapterData(String searchKeyword) {

            final ArrayList<BusinessDetails> listData = new ArrayList<BusinessDetails>();
            String searchWith = "";
            Log.i("BusinessArray  ", "size is "
                    + sitesList.getBusinessArray().size());

            list.clear();

            if (sitesList.getBusinessArray() != null
                    && sitesList.getBusinessArray().size() > 0) {

                for (int i = 0; i < sitesList.getBusinessArray().size(); i++) {
                    // String searchWith = "";
                    searchWith += sitesList.getBusinessArray().get(i).busName;
                    Log.i("businessName ", "Bus_Name is "
                            + sitesList.getBusinessArray().get(i).busName
                            + " startwith " + startsWith);

                    if (searchWith.toLowerCase().indexOf(searchKeyword.toLowerCase()) != -1) {
                        listData.add(sitesList.getBusinessArray().get(i));
                    }

                }
                Log.i("List data is inside loop call", "Listdata" + listData.size());
            } else {
                Log.i("sitesList.getBusinessArray() is zero", "size Zero");
            }

            return listData;
        }
我对我的功能所做的更改如下:

 private ArrayList<BusinessDetails> GetSearchAdapterData(String searchKeyword) {

            final ArrayList<BusinessDetails> listData = new ArrayList<BusinessDetails>();
            String searchWith = "";
            Log.i("BusinessArray  ", "size is "
                    + sitesList.getBusinessArray().size());


            if (sitesList.getBusinessArray() != null
                    && sitesList.getBusinessArray().size() > 0) {

                for (int i = 0; i < sitesList.getBusinessArray().size(); i++) {

                    searchWith += sitesList.getBusinessArray().get(i).busName;
                }

                for (int i = 0; i < sitesList.getBusinessArray().size(); i++) {
                    if (searchWith.matches(".*\\b" + searchKeyword + "\\b.*")) {
                        listData.add(sitesList.getBusinessArray().get(i));
                        Log.i("Match Word fromList", "" + listData.get(i).busName);
                    }
                }
                    Log.i("List data is inside loop call", "Listdata" + listData.size());
            } else {
                Log.i("sitesList.getBusinessArray() is zero", "size Zero");
            }

            return listData;
        }

任何帮助都将不胜感激,所以,请。。。如果我正确理解问题,请提供帮助

sitesList.getBusinessArray().size() == 2  
sitesList.getBusinessArray().get(0).busName == "Qtlist and Uses"  
sitesList.getBusinessArray().get(1).busName == "android"
searchWith的第一个值将是Qtlist和Uses,而searchWith的第二个值将是Qtlist和Usesandroid,因为您将busName附加到searchWith。因此,两者都与indexof测试匹配是正确的

省略“+”并使用

searchWith = sitesList.getBusinessArray().get(i).busName;

您可以使用stringmatches方法和regex来匹配整个单词。下面是一个小例子,你可以用它来解决你的问题

String[] ss={"Qtlist and Uses","android"};

        for(String s:ss){
            System.out.println("s is "+s+"  and it matches with "+s.matches(".*\\band\\b.*"));
        }
以下是该计划的结果:

s is Qtlist and Uses  and it matches with true
s is android  and it matches with false
此处\b已用于标记单词边界。希望它能解决你的问题

编辑1:尝试替换以下代码:

if (searchWith.toLowerCase().indexOf(searchKeyword.toLowerCase()) != -1) {
                        listData.add(sitesList.getBusinessArray().get(i));
                    }

可以使用以下正则表达式匹配任何单词

".*\\banyword\\b.*"

否决投票的人当然可以,但在帮助之后,不要只是否决投票然后离开,如果你知道的话,让我们也来。在这个编辑中,首先我得到完整的企业名称字符串,然后尝试与它进行比较。谢谢你的回复,但我在我的edittextbox中有三个字符时启动了API,所以,它返回数组,然后在这三个单词之后,不管我要输入什么,它都会通过这个方法在本地搜索。如果您需要,我可以添加我添加到edittextview中的textwatchers代码,但这不是我添加用于本地搜索的方法的逻辑。为什么您不能在第一个版本中删除searchWith并将其替换为SiteList.getBusinessArray.geti.busName?你能指出结果是否正确吗?如果不正确,请尝试解释它们不正确的原因。嘿,它起作用了。谢谢你真的很有帮助,我也理解我的错误。你试图在之后给空间,即,然后它必须显示1。我不会得到同样的结果,我将编辑我的帖子并添加新的代码。你的逻辑很好,但是Marc sol。为我工作谢谢你的时间
".*\\banyword\\b.*"