【问题标题】:Add links to URLS in text string, Java在文本字符串中添加指向 URL 的链接,Java
【发布时间】:2011-10-05 08:16:24
【问题描述】:

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

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;
    }

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

【问题讨论】:

  • 顺便说一句,请确保您的 URL 已被清除(例如使用 Java 的 URLEncoder)。否则,你就会对各种攻击敞开心扉。
  • 我认为建议的解决方案有问题。如果 URL 后跟空格以外的任何内容(如 , 或 .),它将不起作用。

标签: java regex


【解决方案1】:

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

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

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

并使用 $0 作为您的实际 URL 以进行替换。

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

【讨论】:

  • 这似乎可行,虽然我认为你的意思是 $0:return text.replaceAll("\\b(https?\\:\\/\\/[\\w\\d:#@%/;$()~_?!+-=.,&amp;]+)", "&lt;a href=\"$0\"&gt;$0&lt;/a&gt;");
  • ...是的,我的 indexOf(".") 没有经过深思熟虑;)
  • 是的,抱歉——我总是在 java 中混淆 $0 和 PHP 中的 $1。我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多