在文本字符串Java中添加指向URLS的链接

时间:2011-10-05 08:16:24

标签: java regex

我目前正在使用此功能在某些文字中添加指向网址的链接:

public static String makeLinksInText(String text) {
        String url, urltext = "";
        int urlstart, urlend;
        int i = 0;
        while(i < text.length() - 5) {
            if(text.substring(i, i + 4).toLowerCase().equals("http")) {
                urlstart = i;
                if(text.indexOf(" ", urlstart) > -1)
                    urlend = text.indexOf(" ", urlstart);
                else if(text.indexOf(".", urlstart) > -1)
                    urlend = text.indexOf(".", urlstart);
                else
                    urlend = text.length();
                url = text.substring(urlstart, urlend);
                urltext = text.substring(0, urlstart) + "<a href=\"" + url + "\" target=\"_blank\" style=\"font-size:10px;\">" + url + "</a>" + text.substring(urlend);
            }
            i++;
        }
        return urltext;
    }

但也许用正则表达式替换会更好。有人可以建议并建议另一种方法吗?感谢

1 个答案:

答案 0 :(得分:1)

有关您的代码的一些注意事项:(1)如果'http'作为文本字符串的一部分出现(例如abdhttpac),您将错误地提取/替换某些内容; (2)几乎所有url都会有一个点 - 你在网址的末尾搜索一个点本身就是错误的:想想http://www.domain.com - 你的代码只会提取'http:// www'和替换它。

正则表达式可能是一个更好的主意。您可以使用类型的正则表达式:

/\b(https?\:\/\/[\w\d:#@%/;$()~_?!+-=.,&]+)/i

并使用$0作为替换的实际网址。

这应该抓住http和https网址。如果你想要其他的(例如ftp,gopher等),你可以相应地修改表达式。请注意,这只会捕获格式正确(url编码)的URL。许多浏览器会理解带有引号的网址,但不会将其视为正确的格式。