2016-09-29 2 views
1

Android 앱에서 검색 한 해시 태그의 결과를 강조 표시해야합니다. 내 검색어가 "#fun"이라고 가정 해보십시오.정규식 기반 연결이 예상대로 작동하지 않음

샘플 문자열 : "#fun #funny # fun123 #funtimes # 재미 # 안녕"

원하는 출력 : "#fun #funny 번호의 fun123이 #fun #hi을 #funtimes"

나는 다음을 시도했다 -

Pattern.compile(searchTerm + "\\b"); 

여기서 searchTerm은 "#fun"이다.

결과 : "#fun#fun 뉴욕 # fun123 #fun 시간 #fun #hi"

단어 경계 "#funny 같은 문자열에 문자열의 하이라이트를 멈추지해야 "?

while (matcher.find()) { 
    applyLink(link, new ClickableLinkSpan.Range(matcher.start(), matcher.end()), s); 
} 

matcher.start() 경기의 정확한 인덱스를 포함 : 당신은 ClickableLinkSpan.Range 방법에 matcher.start()matcher.end()을 통과해야

private void addLinkToSpan(Spannable s, Link link) { 
     Pattern pattern = Pattern.compile(searchTerm + "\\b"); 
     Matcher matcher = pattern.matcher(mText); 

     while (matcher.find()) { 

      int start = matcher.start(); 

      if (start >= 0) { 
       int end = start + link.getText().length(); 

       applyLink(link, new ClickableLinkSpan.Range(start, end), s); 
      } 
     } 
    } 

private void applyLink(final Link link, final ClickableLinkSpan.Range range, Spannable text) { 
     ClickableLinkSpan linkSpan = new ClickableLinkSpan(link, range); 
     text.setSpan(linkSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

     StyleSpan styleSpan = new StyleSpan(link.getTextStyle().ordinal()); 
     text.setSpan(styleSpan, range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
+0

전체 코드를 알려주세요. – TheLostMind

+1

'\ b'이 올바르게 작동합니다. https://regex101.com/r/3jYEoy/1 – vks

+0

대신이 코드를 사용하여 작동하는지 확인하십시오. Pattern.compile (searchTerm + "[^ \\ d \ w]"); – Alikbar

답변

0

:

내가 정규식을 적용하고있어 어떻게 값 문자열의 시작 위치이며, matcher.end()에는 현재 일치 항목의 끝 인덱스가 저장됩니다.

관련 문제