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。 亲测有效~!
阅读全文
0 0
- Java String 提取 http 网址
- 网址提取 Java API 概述
- java提取优酷等视频网址的信息
- 特征提取相关网址
- Java发送HTTP请求和提取数据的Java代码
- java中String中数字提取到数组中
- Java 网址大全 http://www.doc-open.com
- [JAVA VC] 短网址生成,HTTP请求,随想
- String.Format格式化网址
- String匹配和提取
- Eclipse 提取string
- http请求测试网址
- JAVA网址
- java网址
- java网址
- java网址
- JAVA网址
- Java网址
- 使用font-size:0 来去掉inline-block元素之间的空隙
- 关于sitemesh装饰器的使用方式
- [leetcode]78. Subsets(Java)
- 22题:栈的压入、弹出顺序
- windows10IoT+树莓派官方摄像头(Pi Camara) == 暂时无解
- Java String 提取 http 网址
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 【Linux】子进程的异步等待方式
- ajax beforeSend complete 方法
- VUE开发环境的搭建
- centos启动tomcat后局域网无法访问,发现8080端口被tcp6占用解决方法
- 存储过程中带游标
- 简版本聊天室server&client-已验证OK
- JavaWeb核心之Servlet