日期:2014-05-17  浏览次数:20926 次

JAVA后台给文章内容标红
List<String> list=new ArrayList<String>();
list.add("微山县公安局");
list.add("微山县");
list.add("微山县指挥中心");
String test="阿娇快根据安康给微山县指挥中心你微山县公安局";

怎样根据list里面的存放的关键字来处理字符串test 使得输出test为:

阿娇快根据安康给<font color='red'>微山县指挥中心</font>你<font color='red'>微山县公安局</font>

我的做法是:
String newTest="";
for(String s:list){
newTest=test.replaceAll(s,"<font color='red'>"+s+"</font>");
test=newTest;
}
但是我这个只能说是理想情况 因为当关键字里面有 font标签的任意字符的时候 font标签也就被replaceall了,这个有什么好的解决办法嘛??求解
java string list

------解决方案--------------------
简单的做法  你在替换的时候先把<font color='red'>和</font>成不可能在关键字里出现的字符  比如@和#

最后在同一替换replace('@','<font color='red'>')   replace('#','</font>')
------解决方案--------------------
引用:
List<String> list=new ArrayList<String>();
list.add("微山县公安局");
list.add("微山县");
list.add("微山县指挥中心");
String test="阿娇快根据安康给微山县指挥中心你微山县公安局";

怎样根据list里面的存放的关键字来处理字符串test 使得输出test为:

阿娇快根据安康给<font color='red'>微山县指挥中心</font>你<font color='red'>微山县公安局</font>

我的做法是:
String newTest="";
for(String s:list){
newTest=test.replaceAll(s,"<font color='red'>"+s+"</font>");
test=newTest;
}
但是我这个只能说是理想情况 因为当关键字里面有 font标签的任意字符的时候 font标签也就被replaceall了,这个有什么好的解决办法嘛??求解



楼主的方法本身就存在问题吧。。。
替换后是这样:
阿娇快根据安康给<font color='red'>微山县</font>指挥中心<font color='red'><font color='red'>微山县</font>公安局</font>

有匹配不到的,还有重复替换的问题。

写个了笨方法:
List<String> list = new ArrayList<String>();
list.add("微山县公安局");
list.add("微山县");
list.add("微山县指挥中心");
list.add("f");
String test = "阿娇f快根据安康给微山县指挥中心你微山县公安局";
String newTest = "";

for(int i=0; i<list.size(); i++){
for(int j=0; j<list.size();j++){
if(list.get(j).indexOf(list.get(i))>=0&&!list.get(j).equals(list.get(i))){
list.set(j, list.get(j).replaceAll(list.get(i), ""));
}
}
}

HashSet hs = new HashSet(list);
    list.clear();
    list.addAll(hs);

for(String s:list){
newTest=test.replaceAll(s,"@"+s+"#");
test=newTest;
}
newTest = test.replaceAll("@","<font color='red'>").replaceAll("#","</font>");
System.out.println(newTest);

而且还有重复