Java 递归提取多层嵌套列表中的特定数据

本文将介绍如何使用 Java 递归方法从一个表示多层嵌套列表的字符串中提取特定层级的数据。例如,给定字符串 '[[[1,2],[3,4]],[5,6]]',我们需要取出 '[5,6]' 所在的那一层数组的数据。

可以使用递归的方法来解决这个问题。首先判断当前字符串是否以 '[' 开头,如果是,说明当前是一个数组,需要进一步递归处理。如果不是,说明当前是一个数字或其他字符,直接返回。当递归到最底层时,即遍历到了最里面的一个数组,可以直接返回这个数组中的数据。然后通过不断返回的方式,将数组层层往上返回,直到返回到最外层的数组,即为所求的数组。

具体实现如下:

public static void main(String[] args) {
    String str = "[[[1,2],[3,4]],[5,6]]";
    List<Integer> result = getList(str);
    System.out.println(result); // 输出 [5, 6]
}

public static List<Integer> getList(String str) {
    List<Integer> result = new ArrayList<>();
    if (!str.startsWith("[")) {
        return result;
    }
    int left = 0, right = 0, count = 0;
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if (ch == '[') {
            count++;
            if (count == 2) {
                left = i;
            }
        } else if (ch == ']') {
            count--;
            if (count == 1) {
                right = i;
                break;
            }
        }
    }
    String subStr = str.substring(left, right + 1);
    if (subStr.startsWith("[[ ")) {
        result = getList(subStr);
    } else {
        String[] arr = subStr.split(",");
        for (String s : arr) {
            if (s.startsWith("[")) {
                result.addAll(getList(s));
            } else if (s.matches("[0-9]+")) {
                result.add(Integer.parseInt(s));
            }
        }
    }
    return result;
}

代码解释:

  1. getList(String str) 方法接收一个表示多层嵌套列表的字符串作为参数。
  2. 首先判断字符串是否以 '[' 开头,如果不是,说明当前不是一个数组,直接返回空列表。
  3. 遍历字符串,使用 count 变量记录当前层级,当 count 等于 2 时,表示找到需要提取的数组的起始位置。
  4. 继续遍历,当 count 等于 1 时,表示找到需要提取的数组的结束位置。
  5. 获取需要提取的数组的子字符串 subStr
  6. 判断 subStr 是否以 '[[ ' 开头,如果是,说明子字符串仍然是一个多层嵌套数组,需要递归调用 getList 方法继续处理。
  7. 如果 subStr 不是以 '[[ ' 开头,说明子字符串是一个简单的数组,将子字符串按 ',' 分割成多个字符串,并将每个字符串解析成数字加入到结果列表中。
  8. 最后,返回结果列表。

总结:

本文介绍了如何使用 Java 递归方法从一个表示多层嵌套列表的字符串中提取特定层级的数据。代码简洁易懂,可以方便地应用到实际项目中。

代码示例:

String str = "[[[1,2],[3,4]],[5,6]]";
List<Integer> result = getList(str);
System.out.println(result); // 输出 [5, 6]

注意:

  1. 本代码假设输入字符串是一个有效的表示多层嵌套列表的字符串。
  2. 为了简化代码,本代码没有对输入字符串进行格式校验。
  3. 本代码仅演示了如何提取特定层级的数据,可以根据实际需求进行修改。
Java 递归提取多层嵌套列表中的特定数据

原文地址: https://www.cveoy.top/t/topic/mUEi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录