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了,这个有什么好的解决办法嘛??求解javastringlist

解决方案 »

  1.   

    从关键字里摘出字体属性,整合到font标签里。
      

  2.   

    判断下是否有<font标签,有就处理下,与字体属性有啥关系
      

  3.   

    简单的做法  你在替换的时候先把<font color='red'>和</font>成不可能在关键字里出现的字符  比如@和#最后在同一替换replace('@','<font color='red'>')   replace('#','</font>')
      

  4.   

    楼主的方法本身就存在问题吧
    替换后是这样:
    阿娇快根据安康给<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);
    而且还有重复