字符串中多关键字标记输出html
方法一
利用replace方法,替换关键字达到相关目的(正则的利用)
//对关键字进行蓝色标记
// keywords为关键字的一个集合
String afterMark= "";
afterMark= originStr;
for(int i=0;i< keywords.length;i++){
if(originStr.contains(keywords[i])){
afterMark= afterMark.replace(keywords[i],"<span style=\"color:#0000ff\">"+keywords[i]+"</span>");
}
}
System.out.println("afterMark=="+afterMark);
方法二
这里用的是递归的方法,因为关键字它出现的地方一次次数都是不可预测的因素。
这里讲一下思路,一遍大家更好的理解
1、找出字符串中出现的关键字,这样就不用每次都找那么多没用的数据去匹配;
2、找出第一个关键字出现的地方并标记,以此类推,截取,然后再找出第一个关键字出现的地方,哝,你看这不就是需要递归了,然后方法应运而生;
3、找个合适的方法拼接输出就可以了,想到这个不由想到了字符串拼接神器–StringBuffer,有兴趣可以自己百度看一下和StringBuilder,String之间的暧昧关系。
// 核心方法(递归灵魂方法)
/**
*originStr 元字符串
*keywords 关键字集合
*afterMark 用来接收标记过后的字符串
*/
public StringBuffer addMark(String originStr,List<String> keywords,StringBuffer afterMark){
int index = originStr.length();
// 用来存放最先出现的关键字
Strign keyword =""
// 循环找出关键字(上述思路观点1)
for(int i=0;i<keywords.size();i++){
String theKeyword = keywords[i];
int theIndex = orginStr.indexof(theKeyword );
if(theIndex == -1){ // 直接就过滤掉了没有用的关键字
keywords.remove(theIndex );
}else if(theIndex < index){
index = theIndex; // 谁才是真正的排在前面,第一个关键字
keyword = theKeyword;
}
}
// ----for循环结束之后找到第一个关键字及其为止
if(index == originStr.length()){ // 找不到关键字直接拼接返回(原样输出)
afterMark.append(originStr);
}else{ //有关键字---递归喽
afterMark.append(originStr(0,index));
//添加标记标签
afterMark.append("<span style=\"color:#0000ff\">"+originStr(index,index+keyword.length()));
String originStr1 = originStr.subString(index+keyword.length(),originStr.length()+"</span>");
addMark(originStr1,keywords,afterMark);
}
return afterMark;
}