-1

正規表現の使用に問題があります。

これは私が持っているものです:

String expr = "1+4+3-2"
Matcher m;

while(Pattern.matches("[+-].*", expr))
{
    (m = Pattern.compile("[+-](.*)").matcher(expr)).find();
    expr = parseTerm(m.group(1));
    System.out.println("+: " + expr)
}

上記の文字列で「+」または「-」を見つけようとしています(または、+や-などのその他の計算1+D[0]+D[5])。+または-を見つけたら、操作の左側と右側の数字を使用して操作を実行したいと思います。したがって、1 + 4は5を作るために加算されます。次に、5 + 3は8を作るために加算され、最後に8-2は減算されて6になります。私の現在のコードは何らかの理由でwhileループを通過していないので、 m何も加算または減算できません。私は何が間違っているのですか?

4

2 に答える 2

0

あなたは数字だけを捕まえる必要があります:

 (m = Pattern.compile("[+-]([0-9]*)").matcher(expr)).find();

シンボルはありません!(.*)。その場合、あなたは表現全体を捕らえるからです。

トークンに他のシンボルが含まれている可能性がある場合(+または=は含まない)、次のように実行できます。

 (m = Pattern.compile("[+-]([^+-]*)").matcher(expr)).find();
于 2013-01-26T06:43:19.300 に答える
0

参照: pattern.matcher() vs pattern.matches()

while (Pattern.compile("[\\+-]").matcher(expr).find())
{
   ....
}
于 2013-01-26T07:17:29.550 に答える