Я хочу оценить математическое выражение sting в java. Эта строка должна содержать функции (avg, max, min, ...), применяемые к векторам или простым номерам. Я уже использую ScriptEngineManager с движком javasript, но он просто использует числа. Я также вижу symja lib, но он выглядит слишком сложным и не документирован. Как сделать? СпасибоКак оценить выражение строки строки в java
ответ
Посмотрите на классы математики и струны javadoc. Если вы знаете формат строки, вы можете найти ее, чтобы найти конкретные номера и функции, которые вы используете. Если вы используете только один из avg/max/min на каждый вход, это должно быть довольно легко.
Вот пример, предположим, что вы хотите его отформатирован как так (это легко, если Theres запятую после каждого значения):
"FUNCTION (а, б, в,)" -> «MIN (3, 6,8,) «
Первое, что вы хотите сделать, это выяснить, какую функцию вы выполняете. Используя метод indexOf, мы можем выяснить, содержит ли он MIN или MAX или что-то еще.
if(expression.indexOf("MIN" != -1){
//calculate min value
}
Вам также понадобится создать список всех номеров, которые вы используете.
int lastIndex = exression.indexOf("(");
while(lastIndex < expression.lastIndexOf(","){
listOfNums.add(Integer.parseInt(expression.subString(lastIndex + 1, expression.indexOf(",", lastIndex + 1)));
lastIndex = expression.indexOf(",", lastIndex + 1);
}
Есть два очень хорошее выражение парсеры, JEP (оплачивается в настоящее время, к сожалению, - http://www.singularsys.com/jep/) и Jexl (гораздо больше, чем просто выражение парсер - http://commons.apache.org/proper/commons-jexl/).
Я предпочитаю Jexl, так вот пример:
JexlEngine jexl = new JexlEngine();
// The expression to evaluate
Expression e = jexl.createExpression("((a || b) || !c) && !(d && e)");
// Populate the context
JexlContext context = new MapContext();
context.set("a", true);
context.set("b", true);
context.set("c", true);
context.set("d", true);
context.set("e", true);
// Work it out
Object result = e.evaluate(context);
Другие примеры - http://commons.apache.org/proper/commons-jexl/reference/examples.html
Приветствия ...
- 1. iOS: NSString Оценить выражение строки
- 2. Оценить пользовательское булевское выражение из строки
- 3. оценить арифметическое выражение строки с помощью питона
- 4. Как оценить математическое выражение из строки в J2ME
- 5. C: оценить часть строки
- 6. Как оценить булевское выражение строки python с помощью eval()?
- 7. VBA - Оценить условия как строки
- 8. Оценить переменную или выражение внутри строки в Sass
- 9. Как создать объект из строки в Java (как оценить строку)?
- 10. Оценить выражение в JSTL
- 11. Оценить значение строки в jmeter
- 12. Как найти выражение, оценить и заменить в Java?
- 13. Java Поиск строки регулярное выражение
- 14. Регулярное выражение для строки * .java
- 15. Java регулярное выражение обрезает строки
- 16. Оценить выражение для конкретного требования в Java
- 17. Java - Как регулярное выражение этой строки?
- 18. Как оценить это выражение
- 19. Как оценить скобка с помощью стеков на строки в C#
- 20. Как оценить выражение в дескрипторах
- 21. Как оценить выражение в угловом?
- 22. Выражение выражения для конкретной строки в Java
- 23. Оценить размер отформатированной строки snprintf()?
- 24. Преобразование строки выражение в C
- 25. Оценка строки как выражение
- 26. Не удается точно оценить Строки
- 27. Оценить выражение в intellij
- 28. Reformat регулярное выражение как строка строки строки #
- 29. bash Оценить, если инструкция из строки
- 30. Ncalc как оценить параметры строки многозначных
вы можете дать пример строки, которую вы используете? – drgPP
Решение ScriptEngine, которое вы уже используете, представляет собой полный интерпретатор JavaScript, поэтому он уже поддерживает функции. – Boann