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

问题描述 投票:0回答: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 的算术表达式,从而定义输出的值

java string expression
5个回答
4
投票

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

请参阅 Jep Console 以获取示例。 看起来 Jep 是付费软件。这可能不是问题,否则正如我所写,您应该能够找到许多等效的库。


3
投票

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

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

1
投票

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

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

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


1
投票

你也可以看看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


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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.