各位帮看看这程序为什么报错
谢谢public class StringUtil {
public static String removeHtml(String str){
int start,end;
boolean flag=true;
String removeStr;
while(flag){
start=str.indexOf("<");
end=str.indexOf(">");
removeStr=str.substring(start, end);
if(end>start && start!=-1 && end!=-1){
str=str.replaceAll(removeStr, "");
}
else flag=false;
}
return str;
}
public static void main(String[] args) {
System.out.println(StringUtil.removeHtml("<TITLE>Java 2 Platform SE 5.0</TITLE>");
}
}
谢谢public class StringUtil {
public static String removeHtml(String str){
int start,end;
boolean flag=true;
String removeStr;
while(flag){
start=str.indexOf("<");
end=str.indexOf(">");
removeStr=str.substring(start, end);
if(end>start && start!=-1 && end!=-1){
str=str.replaceAll(removeStr, "");
}
else flag=false;
}
return str;
}
public static void main(String[] args) {
System.out.println(StringUtil.removeHtml("<TITLE>Java 2 Platform SE 5.0</TITLE>");
}
}
end=str.indexOf( "> ");
removeStr=str.substring(start, end); 中 removeStr=str.substring(start, end); 获得的少了一个">",需要改为
str.substring(start, end+1); 具体原因要看substring的用法
错误二:
removeStr=str.substring(start, end);
if(end> start && start!=-1 && end!=-1){
str=str.replaceAll(removeStr, " ");
}
因为在最后一次截取完之后,循环并不会立即退出,在转入下一次截取时,start=-1,end=-1,但是removeStr=str.substring(start, end);
仍然会执行,所以会导致indexOfBounds异常。
正确的程序如下:
public static String removeHtml(String str){
int start = -1,end = -1;
boolean flag=true;
String removeStr;
while(flag){
start=str.indexOf( "<");
end=str.indexOf(">");
if(end> start && start!=-1 && end!=-1){
removeStr=str.substring(start,end+1);
str=str.replaceAll(removeStr, "");
} else flag=false;
}
return str;
}
System.out.println(StringUtil.removeHtml( " <TITLE> Java 2 Platform SE 5.0 </TITLE> ");
这句话后面缺少一个右括号。
还有你的程序有一个bug就是取道的removeStr是“<TITLE”这样的字符,而不是你希望的<TITLE>,是因为你的substring的时候使用的end,substring方法取begin参数所在位置到end参数前一个位置间的字符串。完整的程序如下:
public class StringUtil{
public static String removeHtml(String str){
int start,end;
String removeStr;
while(true){
start=str.indexOf("<");
end=str.indexOf(">");
if(end>start&&start!=-1&&end!=-1){
removeStr=str.substring(start,end+1);
str=str.replaceAll(removeStr, "");
}
else
break;
}
return str;
}
public static void main(String[] args){
System.out.println(StringUtil.removeHtml( "<TITLE> Java 2 Platform SE 5.0</TITLE>"));
}
}