各位帮看看这程序为什么报错
谢谢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>");
         }
}  

解决方案 »

  1.   

    错误一: start=str.indexOf( " < "); 
                                                  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;
        }
      

  2.   

    你的程序会出现超出索引的异常,是因为你对if(end> start   &&   start!=-1   &&   end!=-1) 判断晚了,因为最后一次的搜索html标记符的时候,事实上字符串中已经没有html标记符了,这个时候的start和end均为-1,但是你判断之前却执行了一次substring(-1,-1)的操作,所以会出现索引异常。另外你的程序的
    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>"));
    }