1
Androidアプリで検索したハッシュタグの結果を強調表示する必要があります。検索用語が「#fun」であるとします。正規表現ベースのリンキングが期待通りに機能しない
サンプル文字列: "#fun #funny#fun123 #funtimes#楽しい#HI"
所望の出力: "#fun #funny#fun123 #funtimes #fun #hi"
私は以下を試しました -
Pattern.compile(searchTerm + "\\b");
ここでsearchTermは "#fun"です。
結果: "#fun#fun NY#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);
}
完全なコードを教えてください。 – TheLostMind
'\ b'は正しく動作します。 https://regex101.com/r/3jYEoy/1 – vks
代わりにこれを使用し、それが動作するかどうかを確認してください: Pattern.compile(searchTerm + "[^ \\ d \ w]"); – Alikbar