java - 解析多级括号之间的字符串到节点

标签 java algorithm

我正在寻找一种方法(算法或 Java 代码)来解析带有多级括号的字符串,如下所示:

(Level 1
    (Level 1.1
        (Level 1.1.1)
        (Level 1.1.2)
        (Level 1.1.3)
    )
    (Level 1.2
        (Level 1.2.1)
        (Level 1.2.2)
        (Level 1.2.3)
    )
)

到具有结构的节点: node structure

我尝试在递归方法中使用 text.substring(text.indexOf('(') + 1 , text.lastIndexOf(')') - 1),但它没有'如果同一级别的括号很少,则无法正常工作。

最佳答案

如果你想练习递归检查这个:

public class Grouping {


    private static final String data = "(Level 1 \n" +
            "    (Level 1.1\n" +
            "        (Level 1.1.1)\n" +
            "        (Level 1.1.2)\n" +
            "        (Level 1.1.3)\n" +
            "    )\n" +
            "    (Level 1.2\n" +
            "        (Level 1.2.1)\n" +
            "        (Level 1.2.2)\n" +
            "        (Level 1.2.3)\n" +
            "    )\n" +
            ")";


    public static void main(String[] args) {
        String s = data.replaceAll("\n", "").trim();
        System.out.println(s);
        char[] chars = s.toCharArray();
        Data data = createData(chars);
        System.out.println(data);
    }

    private static Data createData(char[] chars) {
        Data result = new Data();
        for (int i = 1; i < chars.length; i++) {
            result.length++;
            if (chars[i] == ')') {
                return result;
            }
            if (chars[i] == '(') {
                Data data = createData(Arrays.copyOfRange(chars, i, chars.length));
                i += data.length;
                result.length += data.length;
                result.nested.add(data);
            } else result.name.append(chars[i]);
        }
        return result;
    }
}

class Data {
    StringBuilder name = new StringBuilder();
    int length = 0;
    List<Data> nested = new ArrayList<>();
}

如果你想做一些有用的东西,最好坚持使用已经发明的数据结构,如 json、xml 等,以及由它们改进的工具。玩得开心!

关于java - 解析多级括号之间的字符串到节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250087/

相关文章:

Python和压缩算法性能

algorithm - 合并两个 DAG 的高效算法

javascript - java.io.IOException : write beyond end of stream OR java. lang.IllegalStateException:getOutputStream()已被调用

Java.Libraries 不可访问

java - 单独使用二进制代码的 1's and 0' s

java - 使用 ZXing 检测(多个)二维码

java - JDialog标题的字体大小

java - 使用计数器的 Douglas Peucker 算法

algorithm - 哪种算法可以找到所有外出路径从另一个节点可达的最近节点

algorithm - 计算地理坐标的边界框