2016-09-29 36 views
1

我需要突出顯示Android應用程序中搜索到的hashtag的結果。假設我的搜索字詞是「#fun」。基於正則表達式的鏈接不能按預期工作

樣品字符串: 「#fun #funny#fun123 #funtimes#樂趣#喜」

所需的輸出: 「#fun #funny#fun123 #funtimes #fun #hi」

我試過以下 -

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

其中searchTerm是「#fun」。

結果: 「#fun#fun紐約#fun123 #fun#fun #hi」

應該不是單詞邊界停止子亮點,如「#funny串「?

這是我如何應用正則表達式:

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.start()matcher.end()傳遞給ClickableLinkSpan.Range方法:

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

matcher.start()包含匹配的精確索引值輸入字符串中的起始位置,並且matcher.end()保存當前匹配的結束索引。

相關問題