项目中,搜索功能需要将搜索结果的中的关键字进行标红,但是如果遇到搜索内容中的英文字母,大小写就不好处理了。
以下是解决方法:
法一:
/**
* 高亮
* @param text edittext内容
* @param target 关键字
* @return SpannableStringBuilder
*/
public static SpannableStringBuilder highlight(String text, String target) {
if(target == null){
target = "";
}
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
CharacterStyle span = null;
target="(?i)"+target;
Pattern p = Pattern.compile(target);//关键字
Matcher m = p.matcher(text);//匹配关键字
while (m.find()) {
span = new ForegroundColorSpan(Color.BLACK);
spannable.setSpan(span, m.start(), m.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannable;
}
textBuilder = highlight(quickList.get(position).getKey(), key);
textView.setText(textBuilder);
也可以 法2:
/**
* 搜索关键字标红
* @param title
* @param keyword
* @return
*/
public static String matcherSearchTitle(String title,String keyword){
String content = title;
String wordReg = "(?i)"+keyword;//用(?i)来忽略大小写
StringBuffer sb = new StringBuffer();
Matcher matcher = Pattern.compile(wordReg).matcher(content);
while(matcher.find()){
//这样保证了原文的大小写没有发生变化
matcher.appendReplacement(sb, ""+matcher.group()+"");
}
matcher.appendTail(sb);
content = sb.toString();
Log.i("Utils", content);
//如果匹配和替换都忽略大小写,则可以用以下方法
//content = content.replaceAll(wordReg,""+keyword+"");
Log.i("Utils", content);
return content;
}