java.lang.Object
com.jmc.math.exp.ExpUtils
表达式工具类
- 从以下版本开始:
- 2.0
-
嵌套类概要
嵌套类 -
字段概要
字段 -
方法概要
修饰符和类型方法说明static <T> ExpUtils.Calculator
<T> calculator
(Map<String, Integer> priority, Function<String, T> str2Number, Func.Object3<T, String, T, T> calc) 构造一个表达式计算器static ExpUtils.Calculator
<Double> 默认的表达式计算器splitInfix
(String infixExp) 把中缀表达式中的数字与运算符分离开(如果是一元运算符需要加括号)把中缀表达式转换为后缀表达式把中缀表达式转换为后缀表达式
-
字段详细资料
-
DEFAULT_PRIORITY
默认运算符优先级
-
-
方法详细资料
-
splitInfix
把中缀表达式中的数字与运算符分离开(如果是一元运算符需要加括号)- 参数:
infixExp
- 中缀表达式- 返回:
- 分离得到的字符串数组(中缀表达式)
- API Note:
// 将中缀表达式数字和运算符分离开(结果:["(", "-1", "+", "2.5", ")", ">>", "366"]) var res = ExpUtils.splitInfix("(-1 + 2.5) >> 366");
-
suffix
把中缀表达式转换为后缀表达式- 参数:
splitInfix
- 中缀表达式分离数字和运算符后的集合priority
- 二元运算符优先级(比如{(+, 1), (/, 2), (**, 2)})- 返回:
- 后缀表达式
- API Note:
// 将中缀表达式数字和运算符分离开(结果:["(", "-1", "+", "2.5", ")", ">>", "366"]) var res = ExpUtils.splitInfix("(-1 + 2.5) >> 366");
-
suffix
把中缀表达式转换为后缀表达式- 参数:
infixExp
- 中缀表达式priority
- 运算符优先级(比如{(+, 1), (/, 2), (**, 2)})- 返回:
- 后缀表达式
- API Note:
// 将中缀表达式转化为后缀表达式,指定默认的运算符优先级(结果:["1", "2", "+", "5", "*"]) var res = ExpUtils.suffix("(1 + 2) * 5", ExpUtils.DEFAULT_PRIORITY);
-
calculator
public static <T> ExpUtils.Calculator<T> calculator(Map<String, Integer> priority, Function<String, T> str2Number, Func.Object3<T, String, T, T> calc) 构造一个表达式计算器- 类型参数:
T
- 表达式中数字类型- 参数:
priority
- 二元运算符优先级str2Number
- 表达式中字符串数字转化成目标类型数字的函数(比如字符串 -> Double,字符串 -> BigInteger)calc
- 运算方法(调用时分别传入数字a,运算符opr,数字b)- 返回:
- 表达式计算器
- API Note:
// 构造一个Double类型的表达式计算器 Calculator<Double> calculator = ExpUtils.calculator( // 使用默认的运算符优先级 ExpUtils.DEFAULT_PRIORITY, // 指定表达式数字转换函数:字符串转换Double Double::valueOf, // 指定运算方法(该方法传入实际的操作数a,b和运算符(字符串)opr) (a, opr, b) -> switch (opr) { case "+" -> a + b; case "-" -> a - b; case "*" -> a * b; case "/" -> a / b; case "%" -> a % b; default -> throw new UnsupportedOperationException("operator" + opr); } );
-
defaultCalculator
默认的表达式计算器- 返回:
- 默认的表达式计算器
- API Note:
// 获取一个默认的表达式计算器 var calculator = ExpUtils.defaultCalculator(); // 计算表达式(结果:12.0) Double res = calculator.calc("(1 + 2) * 4");
-