因此,如果我有一个用括号括起来的表达式,括号之间或括号之外的任何内容,我怎样才能删除最外面的一对括号,使用递归并调用 parseFactor (每次我看到一组括号我调用 parseFactor)?由于这非常模糊,我会给你一个例子来说明我的意思。以这个为例(这不是我要解决的具体问题,只是一个一般性的想法):
如果我有表达
((4+1)*1) + 5
我想将其分解,以便我首先得到(4+1)*1
(第一对括号中的内容)。然后,再次调用 parseFactor 函数,因为我看到另一组括号,然后调用 parseExpression 的 parseFactor 将使用递归进行内部计算。所以这意味着我得到5*1
. 然后我使用函数 parseTerm 和 get 进行计算5
。一旦我退出递归,我就会5+5
调用另一个名为 parseExpression 的函数,它将计算 5+5 并返回 10。
目前,我Matcher m = Pattern.compile("\\((.*)").matcher(expr)).find()
在 parseFactor 中使用,然后将结果分组以删除第一个括号,引导我使用(4+1)*1) + 5
. 我再次调用 parseFactor 得到 4+1)*1) + 5。问题是我不知道如何去掉外括号。如果有人需要,这是我的代码供参考:
else if(Pattern.matches("\\(.*", expr)){
(m = Pattern.compile("\\((.*)").matcher(expr)).find();
String save = m.group(1);
(m = Pattern.compile("\\)(.*)").matcher(expr)).find();
String remainder = m.group(1);
int length = save.length();
int rLength = remainder.length();
save = save.substring(0, length - (rLength));
expr = parseExpr(save);
int i = findInt(expr);
String value = Integer.toString(i);
expr = value + remainder;
(m = Pattern.compile("\\)(.*)").matcher(save)).find();
}
其中 expr 是要解析、分解和计算的字符串。这段代码来自我的 parseExpression 函数。findInt() 只返回它在字符串中找到的第一个整数。
编辑:我必须使用正则表达式。