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);
}
전체 코드를 알려주세요. – TheLostMind
'\ b'이 올바르게 작동합니다. https://regex101.com/r/3jYEoy/1 – vks
대신이 코드를 사용하여 작동하는지 확인하십시오. Pattern.compile (searchTerm + "[^ \\ d \ w]"); – Alikbar