码迷,mamicode.com
首页 > 其他好文 > 详细

字符串格式化

时间:2020-07-29 09:56:21      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:contain   数据   length   app   i++   toc   buffer   nta   false   

public class DeleteStr {
    static StringBuffer end;
    //    static  String startStr = "<123>1<456>8<9</456></123>";
    //    static String startStr = "<2abc>7<df</2d>8></2abc>";
    //    static String startStr = "<123>4<456>>5<2ab>>";
    static String startStr = "<1sd>qwe<<4fg>8><";
    static int leftIndex = 0;//左检查点下标
    static int rightIndex = 0;//右检查点下标
    static int recIndex = 0;//可用数值起始点
    static int leftInidexNum = 0;//左检查点数量
    static int rightInidexNum = 0;//右检查点数量
    static boolean isHaveLeftTag = false;//是否存在左检查点
    static boolean isHaveRightTag = false;//是否存在右检查点

    public static void check(char[] checkCharArray) {
        end = new StringBuffer();
        recIndex = 0;
        rightIndex = 0;
        leftIndex = 0;
        isHaveLeftTag = false;
        isHaveRightTag = false;
        for (int i = 0; i < checkCharArray.length; i++) {
            char leftChar = checkCharArray[i];
            //<123>4<456>>5<2ab>>
            if (isHaveLeftTag) {
                //已经找到了第一个左检查点,开始寻找第一个右检查点
                if (leftChar == ‘<‘) {
                    //找到第二个左检查点,重新设置左检查点坐标,并且跳出本次循环
                    leftIndex = i;
                    continue;
                }
                
                if (leftChar == ‘>‘) {
                    //开始检索右检查点
                    rightInidexNum++;//右检查点数量++
                    rightIndex = i;//记录右检查点下标
                    isHaveRightTag = true;//记录找到了右检查点
                    //找到第一个右检查点,记录坐标,此时已经完成了左右检查点的检查,左检查点左边到上一个右检查点右边的数据,为想要的数据
                    for (int j = recIndex; j < leftIndex; j++) {
                        end.append(checkCharArray[j]);
                    }
                    //重新设置左起始点
                    recIndex = rightIndex + 1;

                    //重新寻找左检查点
                    isHaveLeftTag = false;
                    isHaveRightTag = false;
                }

            } else {
                //没有找到第一个左检查点
                if (leftChar == ‘<‘) {
                    leftInidexNum++;
                    //找到第一个点,记录位置
                    isHaveLeftTag = true;
                    leftIndex = i;
                }
            }
            //字符已经检索完毕,此时,最后一个点满足左检查点也没用,从上一个记录点采集数据
            if (i == checkCharArray.length - 1) {
                for (int j = recIndex; j < checkCharArray.length; j++) {
                    end.append(checkCharArray[j]);
                }
            }
        }

        //检查出的字符可能包含子检查点,此时递归检查
        String aaaa = end.toString();
        if (aaaa.contains("<") && aaaa.contains(">")) {
            char[] aaa = aaaa.toCharArray();
            check(aaa);
        }
    }

    public static void main(String[] args) {
        char startCharArr[] = startStr.toCharArray();
        check(startCharArr);
        System.out.println(end);
    }
}

 

字符串格式化

标签:contain   数据   length   app   i++   toc   buffer   nta   false   

原文地址:https://www.cnblogs.com/zhdsky/p/13394590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!