使用SpinnerString和Pattern正则表达式,获取字段中的要求字段,改变其属性

内容也就和标题一样,通过SpinnerString设置文字的属性,如下面:

  //spinnableString就是修改文本的属性
//   SpannableString spannableString = new SpannableString(str);
  ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);        //设置颜色
  spannableString.setSpan(span, Integer.parseInt(map.get(START)), Integer.parseInt(map.get(END)), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//具体百度
还要设置texteview的属性:textView.setText(spannableString);


之后通过正则表达式,从字段中获取想要的字段:

public List<HashMap<String, String>> getStartAndEnd(Pattern pattern)
{
    List<HashMap<String, String>> lst = new ArrayList<HashMap<String,String>>();
    Matcher matcher = pattern.matcher(str);                   //用正则表达式匹配在文本中是否有查找的字段,如果有就讲其存储在list中
    while(matcher.find())
    {
        HashMap<String, String> map = new HashMap<String, String>();
 //       map.put(PHRASE, matcher.group());
        map.put(START, matcher.start()+"");                  // start函数返回匹配到的子字符串的开始位置,没有匹配到的话,应该是-1,小于0
        map.put(END, matcher.end()+"");
        lst.add(map);
    }
    return lst;
}

之后就是输入需要的字段:

hightLight(Pattern.compile(TOPIC));
hightLight(Pattern.compile(NAME));
hightLight(Pattern.compile(URL));

private static final String TOPIC="#.+?#";
private static final String NAME="@([\u4e00-\u9fa5A-Za-z0-9_]*)";
private static final String URL="http://.*";

private String str="#《爱够了没》第二季开播了# 麻辣的话题看够没?[爱你][花心][抓狂]强大的美女观察团看够了没?@陈汉典 回归,@HOLD住姊LINLIN 爆笑加盟,《#爱够了没#》第二季播出了!五位帅哥一一登台亮相,Hold住姐现场征婚,不知道Hold住


下面为整个源代码:

package app.coolweather.com.weibo;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Administrator on 2016/8/27.
 */
public class AtActivity extends Activity {
    private ProgressDialog progressDialog;
    private TextView textView;
    private static String START="start";
    private static String END="end";
    private String str="#《爱够了没》第二季开播了# 麻辣的话题看够没?[爱你][花心][抓狂]强大的美女观察团看够了没?@陈汉典 回归,@HOLD住姊LINLIN 爆笑加盟,《#爱够了没#》第二季播出了!五位帅哥一一登台亮相,Hold住姐现场征婚,不知道Hold住姐青睐哪一个呢? http://t.cn/ShSRRN ";


    private static final String TOPIC="#.+?#";
    private static final String NAME="@([\u4e00-\u9fa5A-Za-z0-9_]*)";
    private static final String URL="http://.*";

    private SpannableString spannableString = new SpannableString(str);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.at_layout);
        showDialg();
        progressDialog.dismiss();
        textView=(TextView)findViewById(R.id.at_text_view);
        hightLight(Pattern.compile(TOPIC));
        hightLight(Pattern.compile(NAME));
        hightLight(Pattern.compile(URL));

       //设置spannableString
        textView.setText(spannableString);


    }

    /**
     * 对查找到的文字进行调高调亮
     * @param pattern
     */
    public void hightLight(Pattern pattern)
    {

        List<HashMap<String, String>> lst  = this.getStartAndEnd(pattern);  //获取查找到的文字字段


        for (HashMap<String, String> map : lst)                 //遍历里面得文字,改变其的属性
        {
            //spinnableString就是修改文本的属性
          //   SpannableString spannableString = new SpannableString(str);
            ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);        //设置颜色
            spannableString.setSpan(span, Integer.parseInt(map.get(START)), Integer.parseInt(map.get(END)), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//具体百度
        }


    }

    /**
     * 用正则表达式匹配字段是否含有需要的文字,有的话就放入list中
     * @param pattern
     * @return
     */
    public List<HashMap<String, String>> getStartAndEnd(Pattern pattern)
    {
        List<HashMap<String, String>> lst = new ArrayList<HashMap<String,String>>();
        Matcher matcher = pattern.matcher(str);                   //用正则表达式匹配在文本中是否有查找的字段,如果有就讲其存储在list中
        while(matcher.find())
        {
            HashMap<String, String> map = new HashMap<String, String>();
     //       map.put(PHRASE, matcher.group());
            map.put(START, matcher.start()+"");                  // start函数返回匹配到的子字符串的开始位置,没有匹配到的话,应该是-1,小于0
            map.put(END, matcher.end()+"");
            lst.add(map);
        }
        return lst;
    }

效果图:


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值