比如有这样的html代码:
[code="java"]
[/code]
想要实现把、
[code="java"]
private static String removeInTag(String a) {
StringBuffer aaa = new StringBuffer();
aaa.append(a);
int BeginIndex = 0;
while(BeginIndex != -1){
BeginIndex = aaa.indexOf("<",BeginIndex);
int StarIndex = aaa.indexOf(" ", BeginIndex);
int EndIndex = aaa.indexOf(">", BeginIndex);
int PreventErr = aaa.indexOf("<", BeginIndex);
if ((PreventErr > EndIndex) && (StarIndex > StarIndex)){
aaa.replace(StarIndex, EndIndex, "");
}
}
return aaa.toString();
}
[/code]
但出现了死循环,死循环的原因何在?
同时由于本人初学java,所以这个方法可能不是最好方法,有没有更高效、更不易出错的方法呢?谢谢!
[b]试试吧:[/b]
[code="java"] String aaa = "
"; System.out.println(aaa.replaceAll("<(/?\\S+)\\s*?[^<]*?(/?)>","<$1$2>"));
// <div><li> <a>情感</a></li><li> <a>美容</a></li></div>[/code]
[code="java"]
// 可以使用正则表达式
String str = "
System.out.println(str.replaceAll("(<\/?)\s*(\S+).*?(\/?>)", "$1$2$3"));
//输出
楼上的已经给你答案了。我告诉你死循环的原因吧
while(BeginIndex != -1){
}
BeginIndex != -1 永远为true,所以会死循环
[code="java"]String regEx = "<[^>]+>";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(content);
String result = content;
if (m.find()) {
result = m.replaceAll("");
}
return result;[/code]
code="java"\s*(\S+).*?(\/?>)
// (<\/?) 匹配 <或则</
// \s*表示匹配0或者多个空格
// (\S+)表示非空格, 也就是匹配a, div, 之类的
// .*?表示匹配其他字符
// (\/?>)表示匹配/>或者>
// $1表示(<\/?)匹配出来的值
// $2表示(\S+)匹配出来的值
// $3表示(\/?>)匹配出来的值
[/code]
你可以去找些正则表达式的资料看看.
正则表达式在文字处理上有很大的方便之处
public class Snippet {
public static void main(String[] args) {
String str = "
}
按照你原来的代码我改了个,可以实现你的需求,我没有注释,你可以看一下,找一下自己代码的不足,你可以把每次取得的BeginIndex等打印出来,看一下每次你希望取得的index和实际的差别。
你可以直接运行,查看效果。。。
[color=blue][b]yy629 的解答很不错,本人再在稍微修改下:[/b][/color]
[code="java"] System.out.println(str.replaceAll("</?(\S+)\s*?.*?>","<$1>"));[/code]
[color=blue][b]括号加错了,这样好了。呵呵,谢谢yy629的指点![/b][/color]
System.out.println(str.replaceAll("<(/?\S+)\s*?.*?>","<$1>"));