模块 jmc.utils
程序包 com.jmc.math.exp

类 ExpUtils

java.lang.Object
com.jmc.math.exp.ExpUtils

public class ExpUtils extends Object
表达式工具类
从以下版本开始:
2.0
  • 字段详细资料

    • DEFAULT_PRIORITY

      public static final Map<String,Integer> DEFAULT_PRIORITY
      默认运算符优先级
  • 方法详细资料

    • splitInfix

      public static List<String> splitInfix(String infixExp)
      把中缀表达式中的数字与运算符分离开(如果是一元运算符需要加括号)
      参数:
      infixExp - 中缀表达式
      返回:
      分离得到的字符串数组(中缀表达式)
      API Note:
      
       // 将中缀表达式数字和运算符分离开(结果:["(", "-1", "+", "2.5", ")", ">>", "366"])
       var res = ExpUtils.splitInfix("(-1 + 2.5) >> 366");
       
    • suffix

      public static List<String> suffix(List<String> splitInfix, Map<String,Integer> priority)
      把中缀表达式转换为后缀表达式
      参数:
      splitInfix - 中缀表达式分离数字和运算符后的集合
      priority - 二元运算符优先级(比如{(+, 1), (/, 2), (**, 2)})
      返回:
      后缀表达式
      API Note:
      
       // 将中缀表达式数字和运算符分离开(结果:["(", "-1", "+", "2.5", ")", ">>", "366"])
       var res = ExpUtils.splitInfix("(-1 + 2.5) >> 366");
       
    • suffix

      public static List<String> suffix(String infixExp, Map<String,Integer> priority)
      把中缀表达式转换为后缀表达式
      参数:
      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

      public static ExpUtils.Calculator<Double> defaultCalculator()
      默认的表达式计算器
      返回:
      默认的表达式计算器
      API Note:
      
       // 获取一个默认的表达式计算器
       var calculator = ExpUtils.defaultCalculator();
       // 计算表达式(结果:12.0)
       Double res = calculator.calc("(1 + 2) * 4");