根据递归取字符串每个大括号节点的值

原字符串: ss{0}123{style|测试{aa{vv}}}ddd{style|{0}}ssss

最终结果: [{0},{style|测试{aa{vv}}},{aa{vv}},{vv},{style|{0}},{0}]

 

java实现方式:               

	// 全局变量
	private static List strResult = new ArrayList();

	// 递归方法
	public static void printAll(String src, boolean flag) {
		System.out.println(src+"    是否是第一次进递归方法 --:"+flag); // 打印每次进来的值
		if (!flag) {
			strResult.add("{" + src + "}");// 这里需要补括号
		}
		List list = getSons(src);
		for (String s : list) {
			printAll(s, false);
		}
	}

	// 拆分方法
	public static List getSons(String src) {
		List list = new ArrayList();
		StringBuilder sb = new StringBuilder();
		// 是否找到左括号标识
		boolean start = false;
		// 括号叠加层数
		int deep = 0;
		for (char c : src.toCharArray()) {
			if (!start) { // 先让程序进来 为了寻找第一个左括号
				if (c == '{') {
					start = true; // 找到了左括号
					deep++; // 遇到左括号就+1 括号数量递增
				}
				continue;
			} else {
				if (c == '{') {
					deep++; // 遇到左括号就+1 括号数量递增
					sb.append(c);
				} else if (c == '}') {
					deep--; // 遇到右括号就-1 括号数量递增
					if (deep == 0) { // 直到等于零 就说明找到结尾了
						list.add(sb.toString()); // 添加到集合
						start = false; // 置为fasle 开始下一轮寻找
						sb = new StringBuilder(); // 重置
					} else {
						sb.append(c);
					}
				} else { // 已经找到了起始左括号 并且不是左括号也不是右括号那就是括号中间的数据 直接拼接起来
					sb.append(c);
				}
			}
		}
		return list;
	}

	public static void main(String[] args) {
		printAll("ss{0}123{style|测试{aa{vv}}}ddd{style|{0}}ssss", true);
		System.out.println("最终结果:   "+strResult.toString());
	}

控制台输出:


ss{0}123{style|测试{aa{vv}}}ddd{style|{0}}ssss  是否是第一次进递归方法 --:true
0                                              是否是第一次进递归方法 --:false
style|测试{aa{vv}}                              是否是第一次进递归方法 --:false
aa{vv}                                         是否是第一次进递归方法 --:false
vv                                             是否是第一次进递归方法 --:false
style|{0}                                      是否是第一次进递归方法 --:false
0                                              是否是第一次进递归方法 --:false
最终结果:   
         [{0}, {style|测试{aa{vv}}}, {aa{vv}}, {vv}, {style|{0}}, {0}]

参考来源: https://ask.csdn.net/questions/672647?ref=myrecommend

你可能感兴趣的:(JAVA笔记)