java - 将字符串转换为数学表达式?

标签 java parsing math

<分区>

假设我有一个以这种方式声明的方法:

public double Calc(String expression) {

// Code

}

我想要一个字符串表达式

"2 + 4 - (3 * 4)"

然后将它提供给 Calc(),它应该返回它获得的值。

你能否从字符串中解析出数学表达式,使其成为 Java 可以理解的表达式?因为通常你可以写

return 2 + 4 - (3 * 4);

但这只适用于那个单一的表达式。

最佳答案

我建议使用 Dijkstra 的双栈算法。

这应该正是您所需要的:

public class DijkstraTwoStack {
    public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                String exp[] = scanner.nextLine().split(" ");
        Stack<String> ops = new Stack<String>();
        Stack<Double> vals = new Stack<Double>();

        for(int i = 0; i < exp.length; i++) {
                        String s = exp[i];
            if (s.equals("(")) {
            }
            else if (s.equals("+") || s.equals("*")) {
                ops.push(s);
            } else if (s.equals(")")) {
                getComp(ops, vals);
            } else {
                vals.push(Double.parseDouble(s));
            }
        }
        getComp(ops, vals);
        System.out.println(vals.pop());
    }

    private static void getComp(Stack<String> ops, Stack<Double> vals) {
        String op = ops.pop();
        if (op.equals("+")) {
            vals.push(vals.pop() + vals.pop());
        } else if (op.equals("*")) {
            vals.push(vals.pop() * vals.pop());
        }
    }
}

还没有测试过,不过应该差不多吧。

关于java - 将字符串转换为数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084984/

相关文章:

java - 找不到适用于 jdbc :mysql://localhost/db 的合适驱动程序

parsing - 解析 : Issue with PFRelation and local datastore

c# - 查找句子的更简单方法是大字符串?

c - 具有更多解的线性方程的算法

java - 使用ArrayBlockingQueue和mutex的多线程代码中的疑问

java - 使用 slf4j 和 log4j 进行 Hibernate 日志记录不生成日志文件

java - 使用 org.springframework.data.jpa.repository.Query 使用列表参数有条件删除

mysql - iOS JSON 解析为 tableview,不正确的行

matlab - 找到雅可比迭代矩阵的谱半径

java - 是否有一个库函数可以将数字舍入到无穷大(即远离 0)