首页 > 解决方案 > Java用括号分割字符串

问题描述

如果我有这样的等式:

(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 套等。我可以使用正则表达式吗?

标签: javaparentheses

解决方案


你不能用正则表达式来做到这一点,因为它不是一个上下文无关的问题。您需要编写自己的递归下降解析器或其他机制才能将表达式解析成树然后使用它。


推荐阅读