したがって、括弧のペアで囲まれた式があり、括弧の間または外側に何かがある場合、最も外側の括弧のペアを削除し、再帰を使用して 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() は、文字列内で見つかった最初の整数を返すだけです。
編集:正規表現を使用する必要があります。