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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章