参考:Android中的正则表达式语法
项目实践:
1.高亮文本中数字部分
例如要展示:附近有200+个工作机会
如果红色部分的数字是可变的,但是在页面中没有其他用途,那么在与Server端制定接口协议时,这句话就可以当做一个字段返回,红色效果由APP这边来实现。代码如下:
tv_near = (TextView)findViewById(R.id.tv_near);
String respText = "附近有200+个工作机会";
String num = getNumbers(respText);
if(!TextUtils.isEmpty(num)){
int sindex = result.indexOf(num);
if(sindex != -1) {
SpannableString msp = new SpannableString(respText);
msp.setSpan(new ForegroundColorSpan(Color.parseColor("#ff552e")), sindex, sindex + num.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv_near.setText(msp);
} else{
tv_near.setText(respText);
}
} else {
tv_near.setText(respText);
}
其中的关键方法是:
/**
* 解释:(\\d+) : \d表示数字,+表示匹配1个或多个;
* [+]? : []表示一个集合,+表示字符+,?表示0个或1个
* 函数作用:匹配“数字”或者“数字+”两种样式的字符串
* @param content
* @return
*/
public static String getNumbers(String content) {
String regExp = "(\\d+)[+]?";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
return matcher.group(0);
}
return "";
}
2.用户名必须是完全的中文字符,不能包含其他任何字符
/**
* 检查是否符合2-5个中文字符
* @return 如果符合返回true,否则返回false
*/
public static boolean isValidUserName(String inputStr) {
if (TextUtils.isEmpty(inputStr)) {
return false;
}
boolean flag = false;
Pattern p = Pattern.compile("^[\u4E00-\u9FA5\uF900-\uFA2D]{2,5}$");
Matcher m = p.matcher(inputStr);
if (m.matches()) {
flag = true;
}
return flag;
}