如何将Java中的字符用作表达式,例如假设我有一个表达式
char ch = '+';
是否可以使用ch的值执行加法,而不使用if-else或switch或类似的东西?
我想使用ch
作为表达式。如果ch = '+'
,则可以执行x = 5 ch 6
之类的操作来计算5+6
吗?
答案 0 :(得分:1)
我不确定是否推荐它,但您可以使用JavaScript引擎。下面找一个技巧:
char op = '*';
String operand1= "10";
String operand2 = "20";
ScriptEngineManager scm = new ScriptEngineManager();
ScriptEngine jsEngine = scm.getEngineByName("JavaScript");
System.out.println(jsEngine.eval(operand1+op+operand2));
这将为您提供200.0
答案 1 :(得分:0)
不使用if / else或switch的一种方法是定义枚举:
enum Operator {
PLUS('+') {
@Override public int apply(int a, int b) { return a + b; }
}, TIMES('*') {
@Override public int apply(int a, int b) { return a * b; }
}, ... ;
static final Map<Character, Operator> map = buildMap();
final char ch;
private Operator(char ch) { this.ch = ch; }
public abstract int apply(int a, int b);
static Map<Character, Operator> buildMap() {
Map<Character, Operator> map = new HashMap<>();
for (Operator op : Operator.values()) {
map.put(op.ch, op);
}
return map;
}
}
然后使用它来处理您的输入:
Operator.map.get(ch).apply(leftOperand, rightOperand);
答案 2 :(得分:0)
以下是方式
答案 3 :(得分:0)
如果你really must do this,Java 8中引入的二进制函数可以生成这个非常优雅的代码:
Map<Character, IntBinaryOperator> operators = new HashMap<>();
operators.put('+', (x, y) -> x + y);
//...
您可以像这样使用此地图:
char ch = '+';
int result = operators.get(ch).applyAsInt(10, 20);
虽然这可能不是您正在寻找的东西,但因为它要求您映射&#39; +&#39;进行手术。