Java String 提取 http 网址

来源:互联网 发布:js数组对象排序函数 编辑:程序博客网 时间:2024/06/08 14:03

由来

最近在做一个 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。 亲测有效~!

原创粉丝点击