| | |
| | | package com.ruoyi.common.utils; |
| | | |
| | | import org.apache.commons.jexl3.*; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import org.apache.commons.jexl3.JexlBuilder; |
| | | import org.apache.commons.jexl3.JexlContext; |
| | | import org.apache.commons.jexl3.JexlEngine; |
| | | import org.apache.commons.jexl3.JexlExpression; |
| | | import org.apache.commons.jexl3.MapContext; |
| | | |
| | | /** |
| | | * @author mitao |
| | | * @date 2024/3/27 |
| | | */ |
| | | public class CalculateUtil { |
| | | |
| | | public static Map<String, Integer> getFieldsAndValue(String rule) { |
| | | // 正则表达式模式,匹配形如 "fieldName:value" 的字符串 |
| | | Pattern pattern = Pattern.compile("\\b(\\w+)_(\\d+)\\b"); |
| | |
| | | return Double.parseDouble(result.toString()); |
| | | } |
| | | |
| | | public static double calculate(String expression) { |
| | | // 创建 JEXL 引擎 |
| | | JexlEngine jexl = new JexlBuilder().create(); |
| | | |
| | | // 创建表达式对象 |
| | | JexlExpression exp = jexl.createExpression(expression); |
| | | // 创建上下文 |
| | | JexlContext context = new MapContext(); |
| | | // 执行计算 |
| | | Object result = exp.evaluate(context); |
| | | |
| | | // 输出结果 |
| | | System.out.println("Result: " + result); |
| | | return Double.parseDouble(result.toString()); |
| | | } |
| | | |
| | | public static String formatExpression(String expression) { |
| | | return expression |
| | | .replaceAll("×", "*") |
| | |
| | | .replaceAll("+", "+") |
| | | .replaceAll("-", "-"); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String string = "field_3 * field_2"; |
| | | System.out.println(getFieldsAndValue(string)); |
| | | } |
| | | } |