Android 字符串批量匹配关键字并高亮处理
有一个需求,敏感词检测,App端将文本框输入的字符长串提交到后端,后端返回敏感词数组,前端输入框对敏感词关键字高亮处理。
第一步:从 字符串找出包含某关键字的所有地方。利用到的类:Pattern,Matcher ,java 基础入门正则表达式 用到的两个类。
Pattern p = Pattern.compile(Pattern.quote(sensitiveContentWord));//关键字
Matcher m = p.matcher(srcText);//匹配关键字
while (m.find()) {
int start = m.start();
int end = start + sensitiveContentWord.length();
}
第二步:高亮着色。
Android 着色大家想到的是 SpannableString加 ForegroundColorSpan,那如何批量着色高亮处理呢?我们需要用到一个新的类:SpannableStringBuilder,和 String 与StringBuilder 同理,下面是敏感词关键字高亮处理。
public static SpannableStringBuilder findSpecWordAndHighLight(String srcText, List<String> keyWords, int highLightColor){
if (EmptyUtils.isEmpty(srcText))return new SpannableStringBuilder("");
SpannableStringBuilder spannable = new SpannableStringBuilder(srcText);
if (EmptyUtils.isNotEmpty(keyWords)) {
for (String sensitiveContentWord : keyWords) {
Pattern p = Pattern.compile(Pattern.quote(sensitiveContentWord));//关键字
Matcher m = p.matcher(srcText);//匹配关键字
while (m.find()) {
int start = m.start();
if (start >= 0) {
int end = start + sensitiveContentWord.length();
spannable.setSpan(new ForegroundColorSpan(highLightColor), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE );
}
}
}
}
return spannable;
}