如何检测字符串中是否存在 URL

新手上路,请多包涵

我有一个输入字符串说 Please go to http://stackoverflow.com 。检测到字符串的 url 部分,许多浏览器/IDE/应用程序会自动添加一个锚点 <a href=""></a> 。所以它变成了 Please go to <a href='http://stackoverflow.com'>http://stackoverflow.com</a>

我需要使用 Java 做同样的事情。

原文由 Rakesh N 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
1 个回答

为此使用 java.net.URL!

嘿,为什么不为这个“java.net.URL”使用java中的核心类并让它验证URL。

虽然下面的代码违反了“仅在特殊情况下使用异常”的黄金原则,但对我来说,尝试为 Java 平台上非常成熟的东西重新发明轮子是没有意义的。

这是代码:

 import java.net.URL;
import java.net.MalformedURLException;

// Replaces URLs with html hrefs codes
public class URLInString {
    public static void main(String[] args) {
        String s = args[0];
        // separate input by spaces ( URLs don't have spaces )
        String [] parts = s.split("\\s+");

        // Attempt to convert each item into an URL.
        for( String item : parts ) try {
            URL url = new URL(item);
            // If possible then replace with anchor...
            System.out.print("<a href=\"" + url + "\">"+ url + "</a> " );
        } catch (MalformedURLException e) {
            // If there was an URL that was not it!...
            System.out.print( item + " " );
        }

        System.out.println();
    }
}

使用以下输入:

 "Please go to http://stackoverflow.com and then mailto:oscarreyes@wordpress.com to download a file from    ftp://user:pass@someserver/someFile.txt"

产生以下输出:

 Please go to <a href="http://stackoverflow.com">http://stackoverflow.com</a> and then <a href="mailto:oscarreyes@wordpress.com">mailto:oscarreyes@wordpress.com</a> to download a file from    <a href="ftp://user:pass@someserver/someFile.txt">ftp://user:pass@someserver/someFile.txt</a>

当然,可以用不同的方式处理不同的协议。您可以使用 URL 类的获取器获取所有信息,例如

 url.getProtocol();

或其余属性:spec、port、file、query、ref 等

http://java.sun.com/javase/6/docs/api/java/net/URL.html

处理所有协议(至少 java 平台知道的所有协议),作为一个额外的好处,如果有任何 java 当前无法识别的 URL 并最终被合并到 URL 类中(通过库更新),你会得到它透明!

原文由 OscarRyz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题