Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Compiler Construction_Expression - Fatal编程技术网

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

Java 将插入的字符串转换为可编译表达式,java,string,compiler-construction,expression,Java,String,Compiler Construction,Expression,不知何故,我对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

不知何故,我对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的算术表达式,从而定义输出值

短暂性脑缺血发作
JMT

您必须编写一个表达式解析器来完成这种行为。实现这一点的方法有很多:

使用ANTLR编写自己的表达式解析器。 包括脚本语言Jython、Beanshell、JavaScript。。。并使用它来解析和计算表达式。Java脚本API可以向您展示如何做到这一点。
您必须编写一个表达式解析器来完成这种行为。实现这一点的方法有很多:

使用ANTLR编写自己的表达式解析器。 包括脚本语言Jython、Beanshell、JavaScript。。。并使用它来解析和计算表达式。Java脚本API可以向您展示如何做到这一点。
自己解析它们并不难,但如果您需要快速且可能准确的结果,您可以使用现有的库之一解析算术表达式,就像这样

有关示例,请参见。
看起来杰普是个付费软件。这可能不是问题,否则正如我所写的,您应该能够找到许多等效的库。

自己解析它们并不难,但如果您需要快速且可能准确的结果,您可以使用现有库中的一个来解析算术表达式,类似或类似的

有关示例,请参见。
看起来杰普是个付费软件。这可能不是问题,否则正如我所写的,您应该能够找到许多等效的库。

Java中没有将字符串作为表达式计算的本地工具。因此,你必须自己做这项工作

如果您只是想要一个快速而肮脏的解决方案,Javassist包含一个代码段编译器,允许您使用表达式定义一个新类,并调用它以获得结果,之后您可以放弃它,即在单独的类加载器中运行它。但这需要一些工作:


Java中没有将字符串作为表达式计算的本机工具。因此,你必须自己做这项工作

如果您只是想要一个快速而肮脏的解决方案,Javassist包含一个代码段编译器,允许您使用表达式定义一个新类,并调用它以获得结果,之后您可以放弃它,即在单独的类加载器中运行它。但这需要一些工作:


你也可以看看JScheme。需要编译并运行jschemejar文件

import jscheme.JS; 

String query = "(+ 10 20)";
System.out.println(query + " = " + JS.eval(query));
参见下面的第三个示例


JScheme主页

您也可以查看JScheme。需要编译并运行jschemejar文件

import jscheme.JS; 

String query = "(+ 10 20)";
System.out.println(query + " = " + JS.eval(query));
参见下面的第三个示例

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

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

需要为上述jar文件设置类路径

资料来源: 如何将字符串转换为算术表达式

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

需要为上述jar文件设置类路径

资料来源: