java是否有内置方法来比较两个运算符的优先级?例如,如果我有一个char'/'和一个char'+',我可以调用一个比较两者的方法,如果第一个大于第二个,则返回true / false(例如true)?
答案 0 :(得分:13)
运算符优先级的定义方式虽然常见,但并不是Java语言应该识别的普遍事实。因此不,Java语言本身没有这样的比较。编写自己的文章当然很容易:
int precedenceLevel(char op) {
switch (op) {
case '+':
case '-':
return 0;
case '*':
case '/':
return 1;
case '^':
return 2;
default:
throw new IllegalArgumentException("Operator unknown: " + op);
}
}
然后给出char op1, op2
,只需比较precedenceLevel(op1), precedenceLevel(op2)
。
如果您的运营商很少,您也可以使用if-else
或三元运算符代替switch
。另一个选择是使用enum Operator implements Comparable<Operator>
,但根据你正在做的事情,也许像ANTLR这样的解析工具会更好。
请注意,上面的示例将^
置于最高优先级,这意味着它可能用于表示取幂。事实上,Java语言中的^
是独占的,或者它的优先级低于+
。
System.out.println(1+2^3); // prints 0
System.out.println(1+(2^3)); // prints 2
System.out.println((1+2)^3); // prints 0
这只是表明这些符号的优先级甚至语义不是普遍的真理。
答案 1 :(得分:2)
没有。你最好的办法是找到一个可以进行语言分析的第三方jar,看看他们是否有类似的方法。
答案 2 :(得分:0)
您可以编写自己的API,执行此操作并将其作为参数发送,并为您提供结果。
答案 3 :(得分:0)
我很困惑你为什么认为在运行时需要这些信息。在我使用的每种语言中,包括代数和英语,运算符优先级是预定义的。