【问题标题】:Converting inserted string to a compilable expression将插入的字符串转换为可编译的表达式
【发布时间】:2009-06-07 20:46:43
【问题描述】:

我对 Java 有点陌生,所以我的问题似乎微不足道,但我在书中的任何地方都找不到答案。

我想与用户启动一个对话,他将在其中输入算术表达式(例如 (2*x+y)),然后打印出该表达式的结果(对于给定的 x 和 y 值)

    String EXPRESION = null;
    EXPRESION = JOptionPane.showInputDialog("Please enter expresion for dy/dx");
    double x = 1.4;
    double y = 5;
    double output = HERE IS THE PROBLEM
    JOptionPane.showMessageDialog("The value is" +output);

我无法转换用户插入的字符串,因此它将用作 x 和 y 的算术表达式,从而定义输出的值

TIA JMT

【问题讨论】:

    标签: java string compiler-construction expression


    【解决方案1】:

    自己解析它们并不难,但如果您需要快速且可能准确的结果,您可以使用现有库之一来解析算术表达式,例如 JEPSimple Parser for Arithmetic Expressions

    有关示例,请参阅Jep Console。 看起来 Jep 是付费软件。这可能不是问题,否则就像我写的那样,您应该能够找到许多等效的库。

    【讨论】:

      【解决方案2】:

      你必须编写一个表达式解析器来完成这种行为。有很多方法可以做到这一点:

      1. 使用例如编写您自己的表达式解析器ANTLR。
      2. 包含一种脚本语言(Jython、Beanshell、JavaScript...)并使用它来解析和评估表达式。 Java Scripting API 可以向您展示如何做到这一点。

      【讨论】:

        【解决方案3】:

        Java 中没有将字符串作为表达式求值的本地工具。因此,您必须自己完成工作。

        如果您只是想要一个快速而肮脏的解决方案,Javassist 包含一个 sn-p 编译器,允许您使用表达式定义一个新类,并调用它来获取结果,之后您可以丢弃它(即在一个单独的类加载器)。不过这需要一些工作:)

        http://www.jboss.org/javassist/

        【讨论】:

          【解决方案4】:

          你也可以看看 JScheme。需要用jscheme jar文件编译运行。

          import jscheme.JS; 
          
          String query = "(+ 10 20)";
          System.out.println(query + " = " + JS.eval(query));
          

          http://jscheme.sourceforge.net/jscheme/doc/userman.html#si查看第三个示例

          JScheme 主页http://jscheme.sourceforge.net/jscheme/main.html

          【讨论】:

            【解决方案5】:

            如何将字符串转换为算术表达式

            import bsh.*;
            
             class Operation
             {
            
                public static void main(String[] args)throws Exception
                {
                    Interpreter i=new Interpreter();
                    int r=(Integer)i.eval(args[0]);
                    System.out.println(r);
                }
            }
            

            为此,我们需要一个单独的 jar 文件,名为:bsh.jar 文件

            需要为上面的jar文件设置classpath

            来源: http://ohmjavaclasses.blogspot.com/2011/11/how-to-convert-string-into-arithmetic.html

            【讨论】:

              猜你喜欢
              • 2019-06-05
              • 1970-01-01
              • 1970-01-01
              • 2010-12-12
              • 2012-09-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多