标签: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