-5

序章

文字列 "34/2 + 52 * 2 + 3.45" の行があると仮定すると、この文字列の行を 1 つの double 値に変換して計算するにはどうすればよいですか?

4

4 に答える 4

5

1 つの方法は、ScriptEngineクラスを使用して、 eval().

JS インタープリターをロードするには、ScriptEngineManager#getEngineByName("js")を使用する必要があります。

コストのかかる操作であることを忘れないでください。

Stack を使用して式を評価するメソッドを作成することをお勧めします。すべての演算が二項演算である場合、スタックを使用して、最初に後置表記に変換することによって、中置式の全体的な値を見つけることができます。逆ポーランド記法を学ぶ。

最後に、いくつかのサードパーティ ライブラリを見ることができます。

于 2013-08-02T05:50:50.317 に答える
2

通常、これは、正規表現 (?) とコンパイラの原則を使用してこの種の式を評価できるある種のレクサー/パーサーによって行われます。明確にするために、レクサーを使用して式全体をトークン (式の最小有効単位) に分割し、パーサーを使用してこれらのトークンの意味を全体として評価し、結果を取得します。

于 2013-08-02T05:52:59.400 に答える
2

Java コードから Javascript スクリプトを使用できます。

// create a script engine manager
ScriptEngineManager manager = new ScriptEngineManager();

// create a JavaScript engine
ScriptEngine jsEngine = manager.getEngineByName("JavaScript");
if (jsEngine !=null)
    // evaluate expression from String
    jsEngine.eval("print(34/2 + 52 * 2 + 3.45)");
else
    System.err.println("JavaScript is not available");

出力:

124.45
于 2013-08-02T05:55:57.990 に答える