public static String mySubString(String str)
        {
            //截取掉非法结束,因为后边截取出的东西可能把标签截取了一半 
            //字符串中可能包含很多开始标签和很多结束标签,要保证开始标签和结束标签都包含在内
            //获得其中包含的开始标签并存放到数组中
            
            List begin = new ArrayList();
            List end = new ArrayList();
            //统计开始标签<和结束标签>的数目
            for (int i = 0; i < str.length(); i++)
            {
                char r = str.charAt(i);
                //添加开始符号的位置
                if (r == '<')
                {
                    begin.add(i);
                }
                //统计结束符号的位置,正常情况下开始位置和结束位置是一一对应的
                if (r == '>')
                {
                    end.add(i);
                }
            }
            //存放标签的集合
            List tag = new ArrayList();
            //获得标签
            int size = 0;
            //当开始的<数量多于>的时候,说明后边的部分标签被截取掉了
            if (begin.size() > end.size())
            {
                //开始标签多的时候,就以结束的标签数量为准
                size = end.size();
                //这个时候就截取掉最后一个<结束之前的,以方便后边来统一加结束标签
                int index = str.lastIndexOf('<');
                //重新给进来的字符串赋予新的值
                str = str.substring(0, index);
            }
            else
            {
                size = begin.size();
            }
            //循环对应取,
            for (int m = 0; m < size; m++)
            {
                //循环,从begin和end中获取对应的值,即取得相同的下标截取其中的字符串,这样取得的就是标签中的内容
                //比如<div>这样根据begin和end中取得的值就为<div>
                String ss = str.substring((Integer)begin.get(m), (Integer)end.get(m) + 1);                //只加开始标签,这里记录所有的开始标签
                if (ss.indexOf('/') < 0)
                {
                    //判断有没有空格,比如<a htrf="">这种情况就只能取得到<a 后边的就不要了,少了个>在后边加的有
                    if (ss.indexOf(" ") >= 0)
                    {
                        ss = ss.substring(0, ss.indexOf(" "));
                    }
                    tag.add(ss);
                }
            }
            //这里要倒着加先出的标签结束符越靠后
            for (int n = tag.size(); n > 0; n--)
            {
                String mystr = tag.get(n - 1).toString();
                //判断是否有<和>
                if (mystr.indexOf("<") < 0)
                {
                    mystr = "<" + mystr;
                }
                if (mystr.indexOf(">") < 0)
                {
                    mystr = mystr + ">";
                }
                //将标签中加入/,比如这里本身取得的是<div>那么就构件成</div>
                String strRes = mystr.substring(0, 1) + "/" + mystr.substring(1);
                //没有结束的就加结束的就将结束标签加上
                if (str.indexOf(strRes) < 0)
                {
                    str += strRes;
                }
            }
            return str;
        }