У меня есть строка, подобная следующей:
String str = "4*5";
Теперь я должен получить результат 20
, используя строку.
Я знаю, что на некоторых других языках функция eval()
сделает это. Как я могу сделать это на Java?
Вы можете использовать класс ScriptEngine
и оценить его как строку Javascript.
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");
Возможно, есть способ получше, но этот работает.
Как и предыдущие ответы, нет стандартный API в Java для этого.
Вы можете добавить файлы groovy jar в свой путь, и groovy.util.Eval.me ("4 * 5") выполнит вашу работу.
Нет , у вас не может быть общего "eval" в Java (или любом другом компилируемом языке). Если вы не хотите написать компилятор Java И JVM, который будет выполняться внутри вашей программы Java .
Да , у вас может быть некоторая библиотека для вычисления числовых алгебраических выражений, подобных приведенному выше - см. Обсуждение в этой ветке .
Не существует стандартного класса или метода Java, который бы делал то, что вы хотите. Возможны следующие варианты:
Выбрать и использовать стороннюю библиотеку оценки выражений. Например, JEL или любая из полдюжины библиотек, перечисленных здесь .
Оберните выражение в исходный код Java для класса с помощью метода eval
, отправьте его компилятору Java, а затем загрузите полученный скомпилированный класс.
Используйте какой-нибудь язык сценариев, который можно вызвать из Java в качестве средства оценки выражений. Возможности включают Javascript, BeanShell и так далее.
Напишите свой собственный оценщик выражений с нуля.
Первый подход, вероятно, самый простой. Второй и третий подходы представляют собой потенциальную угрозу безопасности, если вы получите оценку выражения от ненадежного пользователя. (Подумайте о внедрении кода.)
В JavaSE нет ничего, что могло бы делать это; вам нужно будет найти сторонние библиотеки или написать свои собственные.