我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestGetNewStr {
public static String getNewStr(String str,String regEx,StringBuffer pre) {
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
int startIndex = 0;
int endIndex = 0;
String oldStr = "";
String newStr = "";
boolean b = true;
if (m.find()) {
oldStr = m.group();
newStr = "<span style=\"color:red\">"+ oldStr +"</span>";
startIndex = m.start();
endIndex = m.end();
pre.append(str.substring(0, startIndex) + newStr);2011年07月
String temp = str.substring(endIndex);
getNewStr(temp,regEx,pre);
b = false;
}
if (b) {
pre.append(str);
}
return pre.toString();
}
public static String getNewStr2(String str,String regEx,StringBuffer pre) {
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
m.appendReplacement(pre, "<span style=\"color:red\">$2</span>");
}
m.appendTail(pre);
return pre.toString();
}在美国如何进行债务追讨
public static void main(String[] args) {
String str = "nbasfksdNbafspandjdk<a>dksfdkspanBajfkdadd</a><span style=\"color:red\">djksnbakdspanjksjf</span>djfkspandjdfknba";
String regEx = "(^|[^</])([Ss][Pp][Aa][Nn])($|[^>])";
StringBuffer pre = new StringBuffer();
System.out.println(getNewStr(str,regEx,pre));
StringBuffer pre2 = new StringBuffer();
System.out.println(getNewStr2(str,regEx,pre2));
}
}
运行结果 :
nbasfksdNba<span style="color:red">fspand</span>jdk<a>dksfd<span style="color:red">kspanB</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">dspanj</span>ksjf</span>djf<span style="color:red">kspand</span>jdfknba
nbasfksdNba<span style="color:red">span</span>jdk<a>dksfd<span style="color:red">span</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">span</span>ksjf</span>djf<span style="color:red">span</span>jdfknba
请问我如何做呢?因为要匹配大小写,所一我的正贼表达式写成那样了,比如,如果你搜索nba的匹配的话,那就是(^|[^</])([Nn][Bb][Aa])($|[^>])了。