java - 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 套等。我可以使用正则表达式吗?
解决方案
你不能用正则表达式来做到这一点,因为它不是一个上下文无关的问题。您需要编写自己的递归下降解析器或其他机制才能将表达式解析成树然后使用它。
推荐阅读
- r - 将具有巨大字符列的数据框重塑为 R 中的多个数字列
- c# - C# 中是否存在“第一个最佳匹配”或谓词后备的模式?
- arrays - 为什么在应用 strcpy() 并使用字符串文字初始化数组后,内存的行为会有所不同?
- javascript - 如何从restful api获取javascript上的数据
- git - Jenkins Git 轮询可以识别标签吗?
- python - 如何在views.py django中按名称获取对象
- html - 带有 mjml 的电子邮件模板 - 图像模糊
- .net-core - EF Core:没有 UniqueConstraint 的 PrincipalKey?
- docker - Traefik ratelimit 是否适用于来自其他服务的请求?
- rust - 使用 struct 代替 FnOnce 的函数