java - 基于正则表达式的链接未按预期工作

标签 java android regex word-boundary

我需要在 Android 应用程序中突出显示搜索主题标签的结果。假设我的搜索词是“#fun”。

示例字符串:“#fun #funny #fun123 #funtimes #fun#hi”

所需输出:“#fun #funny #fun123 #funtimes #fun#hi”

我尝试了以下方法 -

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

其中 searchTerm 是“#fun”。

结果:“#fun #funny #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);
    }

最佳答案

您需要将 matcher.start()matcher.end() 传递给 ClickableLinkSpan.Range 方法:

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

matcher.start() 包含输入字符串中匹配值开始位置的精确索引,matcher.end() 包含当前匹配的结束索引。

关于java - 基于正则表达式的链接未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761973/

相关文章:

android - JPA、EclipseLink 和 Android

java - Android, NDK, JNI, "cannot initialize a variable of type ' 长 *' with an rvalue of type ' jlong​​ *' "

java - 从数据库加载数据时添加进度条

java - 删除java中单词和特殊字符之间的字符串内容

java - 静态内部类和非静态内部类的区别?

java - volatile 示例(在 JLS8/8.3.1.4 volatile 字段中)不起作用?

java - Android Jain Sip - Sip 注册?

java - 可以脱离其他类(class)吗?

regex - 获取引号之间的值并将其替换为包含在某些命令中的值

regex - Perl 正则表达式匹配表情符号