Как оценить математическое выражение, данное в виде строки? [Закрыто]

302
задан Shah 19 December 2018 в 06:15
поделиться

4 ответа

С JDK1.6 вы можете использовать встроенный механизм Javascript.

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Test {
  public static void main(String[] args) throws ScriptException {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String foo = "40+2";
    System.out.println(engine.eval(foo));
    } 
}
359
ответ дан 23 November 2019 в 01:25
поделиться

Я думаю, что как бы вы это ни делали, это будет связано с множеством условных операторов. Но для одиночных операций, как в ваших примерах, вы можете ограничить его до 4 операторов if с чем-то вроде

String math = "1+4";

if (math.split("+").length == 2) {
    //do calculation
} else if (math.split("-").length == 2) {
    //do calculation
} ...

. Это становится намного сложнее, когда вы хотите иметь дело с несколькими операциями, такими как «4 + 5 * 6».

Если вы пытаетесь построить калькулятор, я бы предпочел передавать каждый раздел вычисления отдельно (каждое число или оператор), а не как одну строку.

4
ответ дан 23 November 2019 в 01:25
поделиться

Правильный способ решить эту проблему - использовать лексер и парсер . Вы можете написать их простые версии сами, или эти страницы также будут иметь ссылки на лексеры и парсеры Java.

Создание парсера с рекурсивным спуском - действительно хорошее учебное упражнение.

30
ответ дан 23 November 2019 в 01:25
поделиться

Кажется, что JEP должен сделать эту работу

5
ответ дан 23 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: