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

让我们说我有一个声明这种方式的方法:

public double Calc(String expression) { // Code } 

我想采用像String这样的String表达式

 "2 + 4 - (3 * 4)" 

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

你能从字符串中解析数学表达式,以便它成为Java可以理解的表达式吗? 因为通常你可以写

 return 2 + 4 - (3 * 4); 

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

我建议使用Dijkstra的twostack算法。

这应该是你需要的:

 public class DijkstraTwoStack { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String exp[] = scanner.nextLine().split(" "); Stack ops = new Stack(); Stack vals = new Stack(); 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 ops, Stack vals) { String op = ops.pop(); if (op.equals("+")) { vals.push(vals.pop() + vals.pop()); } else if (op.equals("*")) { vals.push(vals.pop() * vals.pop()); } } } 

没有测试过,但它应该是正确的。

让我说一个可以采用的过程作为一个答案,我认为虽然浏览了几个关于SO的问题,你应该在不加载JS编译器的情况下对如何做到这一点有一个公平的想法。

对于初学者,您需要通过将数学字符串转换为中缀字符串的函数来解析字符串。 然后你通过在循环中分解字符串来返回你的答案,你基本上将这个表达式评估为另一个函数。 这里有一个非常详细的过程。