Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-表达式解析&;评价图书馆_Java_Expression - Fatal编程技术网

JAVA-表达式解析&;评价图书馆

JAVA-表达式解析&;评价图书馆,java,expression,Java,Expression,我正在寻找一个JAVA库来解析和计算表达式。我搜索并尝试了一些库,比如Apache的JEXL和Jeval,但它们并不是我所需要的 我的要求: 支持所有值类型(即int、double、boolean、String等) 支持所有已知的数学和逻辑运算符(+、-、*,,如果找不到实际的Java表达式求值库,您可以选择以下几种解决方案: 使用XPath计算表达式。 优点:XPath知道逻辑运算符,您可以使用Xalan的扩展实现变量和自定义函数 缺点:XPath的类型比Java少 使用JavaScri

我正在寻找一个JAVA库来解析和计算表达式。我搜索并尝试了一些库,比如Apache的JEXL和Jeval,但它们并不是我所需要的

我的要求:

  • 支持所有值类型(即int、double、boolean、String等)

  • 支持所有已知的数学和逻辑运算符(+、-、*,,如果找不到实际的Java表达式求值库,您可以选择以下几种解决方案:

    • 使用XPath计算表达式。
      • 优点:XPath知道逻辑运算符,您可以使用Xalan的扩展实现变量和自定义函数
      • 缺点:XPath的类型比Java少
    • 使用JavaScript计算表达式。
      • 优点:Javascript非常灵活,在您的需求紧张时仍然适用。您也可以使用Javascript实现变量和自定义函数
      • 缺点:Javascript的类型比Java少
    • 使用JSP的表达式语言评估表达式(例如,使用)

    就像建议的那样,您可以使用JavaScript。但您也可以看看哪些支持您的需求。

    试试。这是一个运行时内存编译器,可以用作表达式计算器。也许这对您来说是正确的。您可以试试-它支持您的大部分需求:

  • 它基于double,因此支持int,另外还支持布尔值为true=1和false=0。不幸的是,不支持字符串
  • 布尔值示例:

    import org.mariuszgromada.math.mxparser.*;
    ...
    ...
    Constant T = new Constant("T = 1");
    Constant F = new Constant("F = 0");
    Expression e = new Expression("T && (F || (F && T))", T, F);
    System.out.println(e.getExpressionString() + " = " + e.calculate());
    
    结果:

    T && (F || (F && T)) = 0.0
    
    Help content: 
    
        2. +                   <Operator>              addition
        3. -                   <Operator>              subtraction
        4. *                   <Operator>              multiplication
        5. /                   <Operator>              division
        6. ^                   <Operator>              exponentiation
        7. !                   <Operator>              factorial
        8. #                   <Operator>              modulo function
        9. &                   <Boolean Operator>      logical conjunction (AND)
       10. &&                  <Boolean Operator>      logical conjunction (AND)
       11. /\                  <Boolean Operator>      logical conjunction (AND)
       12. ~&                  <Boolean Operator>      NAND - Sheffer stroke
       13. ~&&                 <Boolean Operator>      NAND - Sheffer stroke
       14. ~/\                 <Boolean Operator>      NAND - Sheffer stroke
       15. |                   <Boolean Operator>      logical disjunction (OR)
       16. ||                  <Boolean Operator>      logical disjunction (OR)
       17. \/                  <Boolean Operator>      logical disjunction (OR)
       18. ~|                  <Boolean Operator>      logical NOR
       19. ~||                 <Boolean Operator>      logical NOR
       20. ~\/                 <Boolean Operator>      logical NOR
       21. (+)                 <Boolean Operator>      exclusive or (XOR)
       22. -->                 <Boolean Operator>      implication (IMP)
       23. <--                 <Boolean Operator>      converse implication (CIMP)
       24. -/>                 <Boolean Operator>      material nonimplication (NIMP)
       25. </-                 <Boolean Operator>      converse nonimplication (CNIMP)
       26. <->                 <Boolean Operator>      logical biconditional (EQV)
       27. ~                   <Boolean Operator>      negation
       28. ¬                   <Boolean Operator>      negation
      162. add                 <Variadic Function>     (2.4) Summation operator add(a1,a2,a3,...,an)
      168. sum                 <Calculus Operator>     summation operator (SIGMA) sum(i, from, to, f(i,...))
      169. prod                <Calculus Operator>     product operator (PI) prod(i, from, to, f(i,...))
      170. int                 <Calculus Operator>     definite integral operator ( int(f(x,...), x, a, b) )
      171. der                 <Calculus Operator>     derivative operator ( der(f(x,...), x) ) 
      172. der-                <Calculus Operator>     left derivative operator ( der-(f(x,...), x) ) 
      173. der+                <Calculus Operator>     right derivative operator ( der+(f(x,...), x) ) 
      174. dern                <Calculus Operator>     n-th derivative operator ( dern(f(x,...), x) ) 
      175. diff                <Calculus Operator>     forward difference operator
      176. difb                <Calculus Operator>     backward difference operator
      177. avg                 <Calculus Operator>     (2.4) Average operator avg(i, from, to, f(i,...))
      178. vari                <Calculus Operator>     (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
      179. stdi                <Calculus Operator>     (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
      180. mini                <Calculus Operator>     (2.4) Minimum value mini(i, from, to, f(i,...))
      181. maxi                <Calculus Operator>     (2.4) Maximum value maxi(i, from, to, f(i,...))
      182. solve               <Calculus Operator>     (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
      301. @~                  <Bitwise Operator>      (4.0) Bitwise unary complement
      302. @&                  <Bitwise Operator>      (4.0) Bitwise AND
      303. @^                  <Bitwise Operator>      (4.0) Bitwise exclusive OR
      304. @|                  <Bitwise Operator>      (4.0) Bitwise inclusive OR
      305. @<<                 <Bitwise Operator>      (4.0) Signed left shift
      306. @>>                 <Bitwise Operator>      (4.0) Signed right shift
    
    x/y = 5.0
    
  • mXparser对运算符、函数等有广泛的支持。请检查。您可以在库中使用帮助功能
  • 例如:

    import org.mariuszgromada.math.mxparser.*;
    ...
    ...
    mXparser.consolePrintHelp("operator");
    
    import org.mariuszgromada.math.mxparser.*;
    ...
    ...
    Argument x = new Argument("x = 10");
    Constant y = new Constant("y = 2");
    Expression e = new Expression("x/y", x, y);
    System.out.println(e.getExpressionString() + " = " + e.calculate());
    
    结果:

    T && (F || (F && T)) = 0.0
    
    Help content: 
    
        2. +                   <Operator>              addition
        3. -                   <Operator>              subtraction
        4. *                   <Operator>              multiplication
        5. /                   <Operator>              division
        6. ^                   <Operator>              exponentiation
        7. !                   <Operator>              factorial
        8. #                   <Operator>              modulo function
        9. &                   <Boolean Operator>      logical conjunction (AND)
       10. &&                  <Boolean Operator>      logical conjunction (AND)
       11. /\                  <Boolean Operator>      logical conjunction (AND)
       12. ~&                  <Boolean Operator>      NAND - Sheffer stroke
       13. ~&&                 <Boolean Operator>      NAND - Sheffer stroke
       14. ~/\                 <Boolean Operator>      NAND - Sheffer stroke
       15. |                   <Boolean Operator>      logical disjunction (OR)
       16. ||                  <Boolean Operator>      logical disjunction (OR)
       17. \/                  <Boolean Operator>      logical disjunction (OR)
       18. ~|                  <Boolean Operator>      logical NOR
       19. ~||                 <Boolean Operator>      logical NOR
       20. ~\/                 <Boolean Operator>      logical NOR
       21. (+)                 <Boolean Operator>      exclusive or (XOR)
       22. -->                 <Boolean Operator>      implication (IMP)
       23. <--                 <Boolean Operator>      converse implication (CIMP)
       24. -/>                 <Boolean Operator>      material nonimplication (NIMP)
       25. </-                 <Boolean Operator>      converse nonimplication (CNIMP)
       26. <->                 <Boolean Operator>      logical biconditional (EQV)
       27. ~                   <Boolean Operator>      negation
       28. ¬                   <Boolean Operator>      negation
      162. add                 <Variadic Function>     (2.4) Summation operator add(a1,a2,a3,...,an)
      168. sum                 <Calculus Operator>     summation operator (SIGMA) sum(i, from, to, f(i,...))
      169. prod                <Calculus Operator>     product operator (PI) prod(i, from, to, f(i,...))
      170. int                 <Calculus Operator>     definite integral operator ( int(f(x,...), x, a, b) )
      171. der                 <Calculus Operator>     derivative operator ( der(f(x,...), x) ) 
      172. der-                <Calculus Operator>     left derivative operator ( der-(f(x,...), x) ) 
      173. der+                <Calculus Operator>     right derivative operator ( der+(f(x,...), x) ) 
      174. dern                <Calculus Operator>     n-th derivative operator ( dern(f(x,...), x) ) 
      175. diff                <Calculus Operator>     forward difference operator
      176. difb                <Calculus Operator>     backward difference operator
      177. avg                 <Calculus Operator>     (2.4) Average operator avg(i, from, to, f(i,...))
      178. vari                <Calculus Operator>     (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
      179. stdi                <Calculus Operator>     (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
      180. mini                <Calculus Operator>     (2.4) Minimum value mini(i, from, to, f(i,...))
      181. maxi                <Calculus Operator>     (2.4) Maximum value maxi(i, from, to, f(i,...))
      182. solve               <Calculus Operator>     (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
      301. @~                  <Bitwise Operator>      (4.0) Bitwise unary complement
      302. @&                  <Bitwise Operator>      (4.0) Bitwise AND
      303. @^                  <Bitwise Operator>      (4.0) Bitwise exclusive OR
      304. @|                  <Bitwise Operator>      (4.0) Bitwise inclusive OR
      305. @<<                 <Bitwise Operator>      (4.0) Signed left shift
      306. @>>                 <Bitwise Operator>      (4.0) Signed right shift
    
    x/y = 5.0
    
    结果:

    T && (F || (F && T)) = 0.0
    
    Help content: 
    
        2. +                   <Operator>              addition
        3. -                   <Operator>              subtraction
        4. *                   <Operator>              multiplication
        5. /                   <Operator>              division
        6. ^                   <Operator>              exponentiation
        7. !                   <Operator>              factorial
        8. #                   <Operator>              modulo function
        9. &                   <Boolean Operator>      logical conjunction (AND)
       10. &&                  <Boolean Operator>      logical conjunction (AND)
       11. /\                  <Boolean Operator>      logical conjunction (AND)
       12. ~&                  <Boolean Operator>      NAND - Sheffer stroke
       13. ~&&                 <Boolean Operator>      NAND - Sheffer stroke
       14. ~/\                 <Boolean Operator>      NAND - Sheffer stroke
       15. |                   <Boolean Operator>      logical disjunction (OR)
       16. ||                  <Boolean Operator>      logical disjunction (OR)
       17. \/                  <Boolean Operator>      logical disjunction (OR)
       18. ~|                  <Boolean Operator>      logical NOR
       19. ~||                 <Boolean Operator>      logical NOR
       20. ~\/                 <Boolean Operator>      logical NOR
       21. (+)                 <Boolean Operator>      exclusive or (XOR)
       22. -->                 <Boolean Operator>      implication (IMP)
       23. <--                 <Boolean Operator>      converse implication (CIMP)
       24. -/>                 <Boolean Operator>      material nonimplication (NIMP)
       25. </-                 <Boolean Operator>      converse nonimplication (CNIMP)
       26. <->                 <Boolean Operator>      logical biconditional (EQV)
       27. ~                   <Boolean Operator>      negation
       28. ¬                   <Boolean Operator>      negation
      162. add                 <Variadic Function>     (2.4) Summation operator add(a1,a2,a3,...,an)
      168. sum                 <Calculus Operator>     summation operator (SIGMA) sum(i, from, to, f(i,...))
      169. prod                <Calculus Operator>     product operator (PI) prod(i, from, to, f(i,...))
      170. int                 <Calculus Operator>     definite integral operator ( int(f(x,...), x, a, b) )
      171. der                 <Calculus Operator>     derivative operator ( der(f(x,...), x) ) 
      172. der-                <Calculus Operator>     left derivative operator ( der-(f(x,...), x) ) 
      173. der+                <Calculus Operator>     right derivative operator ( der+(f(x,...), x) ) 
      174. dern                <Calculus Operator>     n-th derivative operator ( dern(f(x,...), x) ) 
      175. diff                <Calculus Operator>     forward difference operator
      176. difb                <Calculus Operator>     backward difference operator
      177. avg                 <Calculus Operator>     (2.4) Average operator avg(i, from, to, f(i,...))
      178. vari                <Calculus Operator>     (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
      179. stdi                <Calculus Operator>     (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
      180. mini                <Calculus Operator>     (2.4) Minimum value mini(i, from, to, f(i,...))
      181. maxi                <Calculus Operator>     (2.4) Maximum value maxi(i, from, to, f(i,...))
      182. solve               <Calculus Operator>     (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
      301. @~                  <Bitwise Operator>      (4.0) Bitwise unary complement
      302. @&                  <Bitwise Operator>      (4.0) Bitwise AND
      303. @^                  <Bitwise Operator>      (4.0) Bitwise exclusive OR
      304. @|                  <Bitwise Operator>      (4.0) Bitwise inclusive OR
      305. @<<                 <Bitwise Operator>      (4.0) Signed left shift
      306. @>>                 <Bitwise Operator>      (4.0) Signed right shift
    
    x/y = 5.0
    
    另外,请检查:a)、b)

  • 完全支持用户定义的功能
  • 示例1-在运行时中定义的主体:

    import org.mariuszgromada.math.mxparser.*;
    ...
    ...
    Function f = new Function("f(x,y) = x*y");
    Expression e = new Expression("20-f(2,5)",f);
    System.out.println(e.getExpressionString() + " = " + e.calculate());
    
    结果1

    20-f(2,5) = 10.0
    
    示例2-通过您自己的实现扩展的主体:

    import org.mariuszgromada.math.mxparser.*;
    ...
    ...
    /*
     * Implementing FunctionExtension interface
     */
    public class Addition implements FunctionExtension {
       double x;
       double y;
       public Addition() {
          x = Double.NaN;
          y = Double.NaN;
       }
       public Addition(double x, double y) {
          this.x = x;
          this.y = y;
       }
       public int getParametersNumber() {
          return 2;
       }
       public void setParameterValue(int argumentIndex, double argumentValue) {
          if (argumentIndex == 0) x = argumentValue;
          if (argumentIndex == 1) y = argumentValue;
       }
       public double calculate(double... params) {
          return x+y;
       }
       public FunctionExtension clone() {
          return new Addition(x, y);
       }   
    }
    
    /*
    * Creating extended function
    */
    Function f = new Function("f", new Addition());
    mXparser.consolePrintln("f.calculate(1,2) = " + f.calculate(1,2) );
    /*
    * Using extended function in expression
    */
    Expression e = new Expression("f(2,3)", f);
    System.out.println(e.getExpressionString() + " = " + e.calculate() );
    
    结果2:

    f.calculate(1,2) = 3.0
    f(2,3) = 5.0
    
    此外,值得关注整个

    最近发现-如果您想尝试语法(并查看高级用例),可以下载mXparser支持的


    致以最诚挚的问候

    您是否考虑过内置Java脚本引擎?这确实是一个令人印象深刻的库,至少从他们声称的doSadly功能来看,pow不受其支持。@ShoaibChikate您只需编写x^y-这与pow(x,y)相同