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