2012-12-03 10 views
6
6*x + 7 = 7*x + 2 - 3*x 

右辺を方程式の左に移動すると、演算子記号を+から - へ、またはその逆に反転する必要があります。Javaでregexを使って+と - を切り替えることはできますか?

java regex replaceAllを使用すると、すべての+を-'に置き換えることができます。その結果、すべての演算子の標識はすべての+を復元することが不可能になります。

回避策として、私は文字列を繰り返して、+と - に出会ったときに+に変更します。しかし、私はまだJavaで正規表現を使用してブール値のペアを切り替える方法があるのだろうか?

String equation = "<Your equation>" 
equation = equation.replaceAll("+","$$$"); 
equation = equation.replaceAll("-","+"); 
equation = equation.replaceAll("$$$","-"); 

と仮定すると、$$$はあなたの方程式ではありません。

+5

あなたは本当に正規表現で数式に取り組むべきではありません。トークナイザを使用し、トークンを操作します。 –

+1

文字列から構文木を生成し、その木を操作して文字列に戻します。はるかに少ない手間とはるかに少ないエラーが発生しやすい。 – Cubic

答えて

10

あなたはこのトリックを使用することができます。

+1

3 replaceAllを使用するとあまり効率的ではありません。さらに、replaceAllの結果を 'equation'に代入するのを忘れました。 – Alex

+1

ねえ、私は彼にトリックを見せた。私はそれが効率的であるとは言いませんでした。それはちょうど反復よりもエレガントです – giorashc

+0

そして彼の方程式が超大でないならば、この解決法は速くて複雑なアルゴリズムで取引することを検討するのに十分速く働くでしょう – giorashc

0

PHP 1で次の操作を行うことができます。

function swap($m) { 
    return ($m[0]=='-')?'+':'-'; 
} 
echo preg_replace_callback('(\+|\-)', 'swap', '1 + 2 - 3 + 4 - 5'); 
+0

JAVAの場合:http://stackoverflow.com/questions/375420/java-equivalent-to-phps-preg-replace-callback – TomTom

関連する問題