Java String 提取 http 网址

由来

最近在做一个 Android 从其他客户端分享 http url 到自己应用,然后以图文消息的方式展示发送给自己的好友。通过 jsoup 把一些网页信息图片先爬出来做预览。然后点击可跳转 webview 预览全文

问题

遇到坑的问题比较多,例如很多网络 jsoup 不一定能扒下来一下信息来预览。另外一个比较棘手的是,由于各个应用通过:


 String text =(String)getActivity().getIntent().getExtras().get(Intent.EXTRA_TEXT);

text 传回来的 text 内容千变万化。但是内部肯定包含一个可以访问的 web url。

  • UC新闻的 可能是 “某某新闻标题 http://xxxx
  • QQ阅读器的可能是 “http://xxxxx 某某网页摘要”

…… 等等
中间可能是以空格分割 或者 以中文逗号句号分开等等,无法完整准确有效的提取其中的 url

        try {
           String[] texts = text.split(" ");
            for (String s : texts) {                if (s.startsWith("http://") || s.startsWith("https://") || s.startsWith("HTTP://") || s.startsWith("HTTPS://")) {
                    link = s;
                   break;
                }
           }
           if (TextUtils.isEmpty(link)) {
               link = text.substring(text.indexOf("http"), text.length());            }
        } catch (Exception e) {
            e.printStackTrace();
        }

我可能会去这样。但是事实证明这样只能过滤出部分应用。网上搜索也没有比较好的办法。

解决

最后同事的指点下 通过正则 Android 下 有 Patterns.WEB_URL; (Java开发可提取该正则表达式)

  /**
     *  Regular expression pattern to match most part of RFC 3987
     *  Internationalized URLs, aka IRIs.  Commonly used Unicode characters are
     *  added.
     */
    public static final Pattern WEB_URL = Pattern.compile(
        "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"
        + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"
        + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?"
        + "(?:" + DOMAIN_NAME + ")"
        + "(?:\\:\\d{1,5})?)" // plus option port number
        + "(\\/(?:(?:[" + GOOD_IRI_CHAR + "\\;\\/\\?\\:\\@\\&\\=\\#\\~"  // plus option query params
        + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?"
        + "(?:\\b|$)"); 
  Pattern pattern = Patterns.WEB_URL;
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            link = matcher.group(0);
        }

最后测试了好一些应用都成功的提取了 url。 亲测有效~!

发布了83 篇原创文章 · 获赞 42 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章