2012-11-02 4 views
-1

목록에서 검색하고 싶습니다.명세서 안드로이드에서 공백으로 특정 단어를 검색하고 싶습니다

현재 indexof()를 사용하고 있지만 단어 뒤에 공백을 넣으면 검색하지만 목록이 제대로 업데이트되지 않습니다.

예 : 목록에서 I'e이 개 기록은 1 Qtlist 2. 안드로이드
내가 검색하면 "과"다음은이를 사용에만 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; 
     } 
변경 I'e 제 기능을 수행하고

은 다음과 같습니다 어떤 도움을 그렇게 이해 될 것이다

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; 
     } 

, ...

+0

하나를 사용하는 모든 단어를 일치시킬 수

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

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

: 다음 코드를 교체하십시오 할 수 있지만 도움을 준 후에 투표를하지 말고 우리에게도 알려주십시오. – MobileEvangelist

+0

이 편집에서는 먼저 전체 비즈니스 이름 문자열을 얻은 다음 비교하려고합니다. – MobileEvangelist

답변

1

만약 도와주세요 문제를 정확히 이해합니다.

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

searchWith에 busName을 추가하기 때문에 searchWith의 첫 번째 값은 "Qtlist and Uses"가되고 두 ​​번째 값인 searchWith은 "Qtlist and Usesandroid"가됩니다. 따라서 둘 모두가 색인 색인과 일치하는 것이 맞습니다.

은 충분한 '+'를 생략하고

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

답장을 보내 주셔서 감사합니다.하지만 API를 실행하면 edittextbox에 3 개의 문자가 생기므로 배열을 반환하고 그 다음 세 단어를 입력하면이 메서드를 통해 로컬로 검색하게됩니다. 필요한 경우 edittextview에 추가 한 textwatchers 코드를 추가 할 수는 있지만 로컬 검색에 사용하는 방법을 추가 한 논리는 아닙니다. – MobileEvangelist

+0

왜 첫 번째 버전에서 searchWith를 제거하지 않고 sitesList.getBusinessArray(). get (i) .busName?으로 바꿀 수 없습니까? 결과가 정확한지 여부를 나타낼 수 있습니까? 그렇지 않은 경우 왜 그들이 정확하지 않은지 설명하십시오. –

+0

헤이 작동 정말 고마워 그리고 내 실수를 이해 – MobileEvangelist

1

당신은 문자열 방법과 전체 단어에 맞게 등록 전 일치 사용할 수있는 사용하지 않는 것입니다. 다음은 귀하의 문제에 사용할 수있는 작은 예제입니다. 사용 된 여기

s is Qtlist and Uses and it matches with true 
s is android and it matches with false 

\b 단어 경계를 표시 :

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

     for(String s:ss){ 
      System.out.println("s is "+s+" and it matches with "+s.matches(".*\\band\\b.*")); 
     } 

다음

프로그램의 넣어 밖으로이다. 그것이 문제를 해결할 수 있기를 바랍니다.

편집 1 : 누가, 투표가 확실하게 할 수있는 다음과 같은 정규식

".*\\banyword\\b.*" 
+0

답장을 보내 주셔서 감사합니다 ... – MobileEvangelist

+0

당신은 공백을주고 나서 "그리고"1을 표시해야합니다. 하나의 – MobileEvangelist

+0

코드입니다. 공유는 귀하의 경우에 트릭을해야합니다 ... –

관련 문제