Android-微博短链接正则表达式与特殊文本高亮

  做新浪微博第三方客户端时,对正文内容的特殊字符(如网页短链接、##话题、@人名等)进行高亮变色,需要用到以下几个正则表达式。

  

1 /**微博短链接正则表达式*/
2 static final String regex_http = "http(s)?://([a-zA-Z|\\d]+\\.)+[a-zA-Z|\\d]+(/[a-zA-Z|\\d|\\-|\\+|_./?%=]*)?";
3 static final String regex_at = "@[\\u4e00-\\u9fa5\\w\\-]+";
4 static final String regex_sharp="#([^\\#|.]+)#";
5 static final String regex_emoji="\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]";

  接下来是高亮特殊字段的函数,在前面的一篇随笔《Android-TextView关键字高亮与超链接》中有范例,本例将其进行改造,令其适合于本项目的使用。


 1 /**
2 * 高亮部分文本
3 * @param content 文本内容
4 * @return
5 */
6 public static SpannableString setTextHighLight(String content) {
7 SpannableString result = new SpannableString(content);
8
9 if (content.contains("@")) {
10 Pattern p = Pattern.compile(regex_at);
11 Matcher m = p.matcher(result);
12 while (m.find()) {
13 int start = m.start();
14 int end = m.end();
15 result.setSpan(
16 (new ForegroundColorSpan(Color.parseColor("#33b5e5"))),
17 start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
18 }
19 }
20
21 if (content.contains("#") ){
22 Pattern p = Pattern.compile(regex_sharp);
23 Matcher m = p.matcher(result);
24 while (m.find()) {
25 int start = m.start();
26 int end = m.end();
27 result.setSpan(
28 (new ForegroundColorSpan(Color.parseColor("#ff7d00"))),
29 start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
30 }
31 }
32
33 if (content.contains("http://") ){
34 Pattern p = Pattern.compile(regex_http);
35 Matcher m = p.matcher(result);
36 while (m.find()) {
37 int start = m.start();
38 int end = m.end();
39 result.setSpan(
40 (new ForegroundColorSpan(Color.parseColor("#33b5e5"))),
41 start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
42 }
43 }
44
45 return result;
46 }

  接下来是对上述方法的应用

1      SpannableString text = Utils.setTextHighLight(weibo.getText());
2 holder.content.setText(text);

  效果图如下

  

  

Nexus5截屏小Tips:

同时按下【音量下键】和【电源键】即可快速截屏,一起按这两个键2秒搞定。

时间: 2024-10-14 23:03:36

Android-微博短链接正则表达式与特殊文本高亮的相关文章

java清除所有微博短链接

java实现微博短链接清除,利用正则,目前只支持微博短链接格式为"http://域名/字母或数字8位以内"的链接格式,现在基本通用 如果链接有多个,返回结果中会有多出的空格,请注意! 实现代码: 1.测试版       public static void main(String[] args) { // System.out.println(testFilter("刚在#微操盘#卖出的这支600111 包钢稀土 又挣钱了!有木有!人品爆发了有木有! http://t.cn/

微博短链接的生成算法(Java版本)

最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址. 开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链接的.后来尝试了下压缩算法(gzip 压缩算法),发现对于url 这种字符串越是压缩,长度就越长

[转载]微博短链接算法

PHP版算法 function shorturl($url='', $prefix='', $suffix='') {     $base32 = array (         'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',         'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',         'q', 'r', 's', 't', 'u', 'v', 'w', 'x',         'y', 'z', '0', '

微博短链接算法php版本

思路:1)将长网址md5生成32位签名串,分为4段, 每段8个字节;2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址; 下面是PHP代码: function shorturl($url='', $prefix='', $suffix='') {

生成短链接的URL

假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的ID,可是这个有大小写字母和数字构成的唯一ID是怎么生成的呢,刚学编程的时候我们用的方法都试拼接一个足够唯一的字符串(比如时间戳加用户ID等等)然后再用MD5或者SHA1散列算法算出一个散列值,用这种方法得到的唯一ID有可能比原始的链接的长度还要长,所以如何来优雅的生成足够短的字符串唯一ID呢? 我们

android发送短信验证码并自动获取验证码填充文本框

android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com), 两分钟申请测试账号,赠送了100条测试短信. android使用java的jar包即可开发 jar下载: http://smsow.zhenzikj.com/doc/sdk.html API文档:http://smsow.zhenzikj.com/doc/java_sdk_doc.html 使用

百度 谷歌 Twitter,这么多短链接服务(Short Url)到底哪家强?

一.短链接是什么 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 它的原理也非常简单,就是采用 Domain Redirect(域名重定向) ,将一个域名自动跳转到另一个域名. 根据wikipedia描述,短链接的方案最早在2000年诞生.在2009年11月,著名短链接服务提供商Bitly的访问量是21亿,可见短链接的使用需求是非常大的. 维基地址 而在国内,短链接的普及与微博息息相关. 最早是由新浪仿照Twitter的140短篇博文功能,上线了新浪微博,之

PHP实现新浪长链接转化成短链接API

我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实现长链接转换成短链接: 新浪提供了一个长短连接转换的API,我们可以使用它:具体实现:(新浪官方接口API:http://open.weibo.com/wiki/微博API) <?php /Sina App_Key define('SINA_APPKEY', '31641035'); functio

关于Linux,用户,组,权限,文本处理工具,正则表达式,vim文本编辑器

一. 用户 ??在Linux系统中,可以创建多个用户,每一个用户都有一个与其对应的ID号,就像每一个人都有一个×××号一样,这就是用户的UID,??在Linux中管理员 root的默认UID为0,普通用户为1-65535,而普通用户又分为系统用户和登录用户,系统用户是不可登录的,对守护进程获取资源进行权限分配使用,其默认UID是1-499(在centos7中是1-1000),普通用户的UID为500-65535(centos7中为1000-65535) ?1. 用户及其属性信息 ??/etc/p