方法一:关键字为数组格式
public class TextHighLight {
public static SpannableStringBuilder matcherSearchContent(String text, String[] keyword1) {
String[] keyword = new String[keyword1.length];
System.arraycopy(keyword1, 0, keyword, 0, keyword1.length);
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
CharacterStyle span;
String wordReg;
for (int i = 0; i < keyword.length; i++) {
String key = "";
if (keyword[i].contains("*") || keyword[i].contains("(") || keyword[i].contains(")")) {
char[] chars = keyword[i].toCharArray();
for (int k = 0; k < chars.length; k++) {
if (chars[k] == '*' || chars[k] == '(' || chars[k] == ')') {
key = key + "\\" + String.valueOf(chars[k]);
} else {
key = key + String.valueOf(chars[k]);
}
}
keyword[i] = key;
}
wordReg = "(?i)" + keyword[i];
Pattern pattern = Pattern.compile(wordReg);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
span = new ForegroundColorSpan(Color.parseColor("#ff5656"));
spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK);
}
}
return spannable;
}
}
方法二:关键字格式为String
public class TextHighLight {
public static SpannableStringBuilder matcheText(String text, String testKey, String colorString) {
List<String> list = new ArrayList();
for(int i = 0; i < testKey.length; i++){
list.add(testKey.substring(i, i + 1));
}
String[] keyword1 = new String[list.size()];
list.toArray(keyword1);
String[] keyword = new String[keyword1.length];
System.arraycopy(keyword1, 0, keyword, 0, keyword1.length);
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
CharacterStyle span;
String wordReg;
for (int i = 0; i < keyword.length; i++) {
String key = "";
if (keyword[i].contains("*") || keyword[i].contains("(") || keyword[i].contains(")")) {
char[] chars = keyword[i].toCharArray();
for (int k = 0; k < chars.length; k++) {
if (chars[k] == '*' || chars[k] == '(' || chars[k] == ')') {
key = key + "\\" + String.valueOf(chars[k]);
} else {
key = key + String.valueOf(chars[k]);
}
}
keyword[i] = key;
}
wordReg = "(?i)" + keyword[i];
Pattern pattern = Pattern.compile(wordReg);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
span = new ForegroundColorSpan(Color.parseColor(colorString));
spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK);
}
}
return spannable;
}
}