在Java中使用表达式中的字符

时间:2015-03-18 12:19:29

标签: java operators

如何将Java中的字符用作表达式,例如假设我有一个表达式

char ch = '+';

是否可以使用ch的值执行加法,而不使用if-else或switch或类似的东西?

我想使用ch作为表达式。如果ch = '+',则可以执行x = 5 ch 6之类的操作来计算5+6吗?

4 个答案:

答案 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)

以下是方式

  • ScriptEngineManager
  • 使用Java词法分析器和解析器
  • BeanShell解释器

由于已经回答您可以在Evaluating a math expression given in string form

中获取有关这些内容的更多详细信息

答案 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;进行手术。