首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linkify Android转换问题

Linkify Android转换问题
EN

Stack Overflow用户
提问于 2011-06-20 19:01:35
回答 3查看 864关注 0票数 2

试着做一些很简单的事情。

用这样的文字

用户名:这是我要做的评论

它在一个TextView中。我想让用户名成为一个链接。我决定最简单的方法是用"$@“这样的东西包围用户名

"$@User名称:$@这是我要做的评论

这样,我就可以使用以下正则表达式

代码语言:javascript
复制
Pattern userName = Pattern.compile(".*\\$@(.+)\\$@.*");

使用Linkify并使其成为一个链接。但是,显然我需要删除分隔符,因此下面是代码

代码语言:javascript
复制
title.setText(titleText);
Linkify.TransformFilter transformer = new Linkify.TransformFilter() {

    @Override
    public String transformUrl(Matcher match, String url) {
       return match.group(1);
    }
};
Linkify.addLinks(title, userName, "content://user=", null,     transformer);

然而,由于某种原因,整个文本变成了一个巨大的链接,而文本根本没有被转换。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-22 18:47:12

事实证明,这是非常容易的。最后,我没有使用疯狂的"$@“来分隔用户名,而是坚持使用

用户名:这是我要做的评论

因此,我最终使用了以下模式

代码语言:javascript
复制
Pattern userName = Pattern.compile("(.+:)");

非常简单,代码就变成了

代码语言:javascript
复制
title.setText(titleText);
Linkify.addLinks(title, GlobalUtil.userName, "user://" + userId + "/");

谢谢你的原建议。我确实是在匹配整个字符串,而不是只匹配userName (链接)。

票数 1
EN

Stack Overflow用户

发布于 2011-06-20 23:38:18

我最好的猜测是,你使用的正则表达式就是问题所在,你告诉它,如果它匹配的话,基本上要挑选出整个字符串,包括你要寻找的东西之前和之后的所有内容。因此,TransformFilter可能被传递给整个匹配的字符串。据我所知,transformUrl希望您返回URL,因此整个字符串都链接到第一个匹配组。

因此,考虑到这一点,您最好将正则表达式更改为类似于"\\$@(.+?)\\$@"的内容(在组中添加一个?以使匹配不贪婪),以避免匹配整个字符串,只选择想要URL化的位(因为缺少更好的术语,加上在单词中添加-ize听起来很酷)。

票数 0
EN

Stack Overflow用户

发布于 2011-06-20 23:54:39

为什么不改变模式中的分隔符呢?

代码语言:javascript
复制
Pattern userName = Pattern.compile(".*(\\$@.+\\$@).*");

然后,更改转换过滤器,以删除开始和结束模式时,更改为URL.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6416055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档