-1

APIを起動して取得したリストを検索したい。

現在、indexof()を使用して検索していますが、単語の後にスペースを指定すると検索されますが、リストが適切に更新されません。

例:リスト1に2つのレコードがあります。Qtlistと用途2. android
「と」を検索すると、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;
        }

どんな助けでもありがたいので、お願いします...助けてください

4

2 に答える 2

1

文字列一致メソッドと正規表現を使用して、単語全体を一致させることができます。以下は、あなたの問題に使用できる小さな例です。

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

here\bは、単語の境界を示すために使用されています。問題が解決することを願っています。

編集1:次のコードを置き換えてみてください:

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

if (sitesList.getBusinessArray().get(i).busName.matches(".*\\band\\b.*")){
     listData.add(sitesList.getBusinessArray().get(i));
}

次の正規表現を使用して、任意の単語に一致させることができます

".*\\banyword\\b.*"
于 2012-11-02T10:03:13.547 に答える
1

問題を正しく理解していれば

sitesList.getBusinessArray().size() == 2  
sitesList.getBusinessArray().get(0).busName == "Qtlist and Uses"  
sitesList.getBusinessArray().get(1).busName == "android"

busName を に追加するため、の最初の値はsearchWith「Qtlist and Uses」になり、2 番目の値はsearchWith「Qtlist and Usesandroid」になりますsearchWith。したがって、どちらも indexof test に一致することは正しいです。

「+」を省略して使用するだけで十分ではありませんか

searchWith = sitesList.getBusinessArray().get(i).busName;
于 2012-11-02T09:25:39.513 に答える