Java 用括号分割字符串

Java Splitting a String by parentheses

如果我有这样的等式:

(equ1)+(equ2)-sqrt(equ2)

如何只收集最上面的括号?方程式可以是这样的:

((inner equation))+((inner equation))

所以按正则表达式拆分,例如:

.split("[()]")

对我没有帮助

我尝试创建一个 for 循环:

for(int i = 0; i < equation.size(); i++) {
        str = equation.get(i).toString();
        str2 = string;
        elements = str2.split("(\((?:[^()]|(?1))*\))");
        
        System.out.println(Arrays.toString(parSolver.toArray()));
    }

((inner equation)) + ((inner equation)) 替换为 "Number1"+"Number2",但如果不先分隔括号,我无法做到这一点;感谢您的帮助。

我必须注意方程式已经回答了,我只需要通过用答案替换括号将其插入字符串即可:

equation element 1: ""Answer"
str: ((inner equation))+ ((inner equation))
becomes: "Answer"+((inner equation))
(Repeat process)

我还尝试过的一件事是尝试获取括号位置:

0,6 8,13

并且我尝试将子字符串设置为 0,6 和 8,13 之间的值。并替换它:

str = string.substring(0, 6);
string = string.replace(str, "Answer");

但是这些值有严重的错误,因为我确实计算了每个括号的位置,比如如果“(”在索引 0 和“)”在索引 6,那么为什么这个子字符串不合作并给我值:(_____)?

我在使用该策略时遇到的错误是 Index out of bounds,而且我似乎永远无法收集到正确的子字符串部分。它总是超过字符串长度,即使括号位置在字符串中。子字符串中的迭代肯定不是从0开始的,否则我不会有这个问题。

注意:如果我可以定义括号呢?比如我有 2 套、3 套等。我可以使用正则表达式吗?

您不能使用正则表达式执行此操作,因为它不是上下文无关问题。您需要编写自己的递归下降解析器或其他机制才能将表达式解析为树,然后使用它。