假设我有一个以这种方式声明的方法:
public double Calc(String expression) {
// Code
}
我想采用像
这样的String表达式"2 + 4 - (3 * 4)"
然后将其提供给Calc()
,它应该返回它获得的值。
你能从字符串中解析数学表达式,以便它成为Java可以理解的表达式吗?因为通常你可以写
return 2 + 4 - (3 * 4);
但那只适用于那个单一的表达。
答案 0 :(得分:7)
我建议使用Dijkstra的twostack算法。
这应该是您所需要的:
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());
}
}
}
没有测试过,但它应该是正确的。
答案 1 :(得分:0)
让我说一个可以采用的过程作为一个答案,我认为虽然浏览了几个关于SO的问题,你应该在不加载JS编译器的情况下对如何做到这一点有一个公平的想法。
对于初学者,您需要通过将数学字符串转换为中缀字符串的函数来解析字符串。然后你通过在循环中分解字符串来返回你的答案,你基本上将这个表达式评估为另一个函数。一个非常详细的过程可以是found here。