Есть ли в Java функция eval ()?

У меня есть строка, подобная следующей:

String str = "4*5";

Теперь я должен получить результат 20, используя строку.

Я знаю, что на некоторых других языках функция eval() сделает это. Как я могу сделать это на Java?

139
задан Francesco Menzani 20 September 2015 в 13:55
поделиться

5 ответов

Вы можете использовать класс ScriptEngine и оценить его как строку Javascript.

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");

Возможно, есть способ получше, но этот работает.

141
ответ дан 23 November 2019 в 23:20
поделиться

Как и предыдущие ответы, нет стандартный API в Java для этого.

Вы можете добавить файлы groovy jar в свой путь, и groovy.util.Eval.me ("4 * 5") выполнит вашу работу.

7
ответ дан 23 November 2019 в 23:20
поделиться

Нет , у вас не может быть общего "eval" в Java (или любом другом компилируемом языке). Если вы не хотите написать компилятор Java И JVM, который будет выполняться внутри вашей программы Java .

Да , у вас может быть некоторая библиотека для вычисления числовых алгебраических выражений, подобных приведенному выше - см. Обсуждение в этой ветке .

5
ответ дан 23 November 2019 в 23:20
поделиться

Не существует стандартного класса или метода Java, который бы делал то, что вы хотите. Возможны следующие варианты:

  • Выбрать и использовать стороннюю библиотеку оценки выражений. Например, JEL или любая из полдюжины библиотек, перечисленных здесь .

  • Оберните выражение в исходный код Java для класса с помощью метода eval , отправьте его компилятору Java, а затем загрузите полученный скомпилированный класс.

  • Используйте какой-нибудь язык сценариев, который можно вызвать из Java в качестве средства оценки выражений. Возможности включают Javascript, BeanShell и так далее.

  • Напишите свой собственный оценщик выражений с нуля.

Первый подход, вероятно, самый простой. Второй и третий подходы представляют собой потенциальную угрозу безопасности, если вы получите оценку выражения от ненадежного пользователя. (Подумайте о внедрении кода.)

44
ответ дан 23 November 2019 в 23:20
поделиться

В JavaSE нет ничего, что могло бы делать это; вам нужно будет найти сторонние библиотеки или написать свои собственные.

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

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