将插入的字符串转换为可编译的表达式

时间:2009-06-07 20:46:44

标签: java string compiler-construction expression

我对Java不熟悉,所以我的问题看似微不足道,但是我无法在书中找到答案。

我想初始化一个用户的对话框,在该对话框中输入算术表达式(例如(2 * x + y))然后打印出这样的表达式的结果(对于给定的x和y值)< / p>

    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

5 个答案:

答案 0 :(得分:4)

自己解析它们并不是很难,但是如果你需要快速且可能准确的结果,你可以使用现有的一个库来解析算术表达式,比如JEP或者{{3} }。

有关示例,请参阅Simple Parser for Arithmetic Expressions。 看起来Jep是付费软件。它可能不是问题,否则在我写的时候,你应该能够找到许多等效的库。

答案 1 :(得分:3)

您必须编写表达式解析器来完成此类行为。有很多方法可以实现这一目标:

  1. 使用例如编写自己的表达式解析器ANTLR。
  2. 包含脚本语言(Jython,Beanshell,JavaScript ...)并使用它来解析和评估表达式。 Java Scripting API可以向您展示如何执行此操作。

答案 2 :(得分:1)

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

如果你只想要一个快速而又脏的解决方案,Javassist包含一个代码片段编译器,允许你用你的表达式定义一个新的类,并调用它来获得你的结果,然后你可以丢弃它(即在一个单独的运行它类加载器)。这需要一些工作:)

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

答案 3 :(得分:1)

你也可以看看JScheme。需要编译&amp;使用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

答案 4 :(得分:0)

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

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);
    }
}

为此,我们需要一个名为:bsh.jar file

的独立jar文件

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

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