在Java程序中,我具有以下字符串:
a= 8,7,"+" b=1,5,"*"
每行是一个单独的过程。我想在每一行中使用该运算符计算出两个数字。但是我不想使用任何类型的条件系统来检测每行中的哪个运算符。
实际上,我的主要问题是在没有条件的情况下检测操作员的类型。我不想使用Javascript引擎。我想知道是否有任何有效和标准的方法。
J. Selva回应的另一个解决方案:
改进之处
导入java.util.HashMap; 导入java.util.Map;
/** * Created by SEA-HAWK on 23/8/15. */ public abstract class Expr { public static Map<String,Object> op; static{ op=new HashMap<>(); op.put("+", new Expr() { @Override public int evaluate(int a, int b) { return a + b; } }); op.put("-", new Expr() { @Override public int evaluate(int a, int b) { return a - b; } }); op.put("*", new Expr() { @Override public int evaluate(int a, int b) { return a * b; } }); op.put("/", new Expr() { @Override public int evaluate(int a, int b) { return a / b; // decimal point loss } }); } abstract public int evaluate(int a, int b); public static int exprEval(String expr){ String a[]=expr.split(","); a[2]=a[2].replaceAll("\"",""); return ((Expr)op.get(a[2])).evaluate(Integer.parseInt(a[0]),Integer.parseInt(a[1])); } }
主功能:
public static void main(String[] args) { String x="20,10,\"*\""; System.out.println(x+"="+Expr.exprEval(x)); x="20,10,\"+\""; System.out.println(x+"="+Expr.exprEval(x)); x="20,10,\"-\""; System.out.println(x+"="+Expr.exprEval(x)); x="20,10,\"/\""; System.out.println(x+"="+Expr.exprEval(x)); }
输出:
20,10,"*"=200 20,10,"+"=30 20,10,"-"=10 20,10,"/"=2
注意:更改数据类型以进行浮点/小数计算。