检查java中的表达式

时间:2016-11-25 03:27:27

标签: java expression

抱歉我的英文。更新了问题:

语言C#:

using LV.Parsenet.dll;

var result = "IF(TL_HS_NGUNG_LUONGKY1 = 1, 0, TL_HS_K_DC_KY1 * NS_HSL * TL_HS_TL_TTDV)";
Parser m_cParser = new Parser();
ExpressionTree m_oExpressionTree = null;

try
{
    m_oExpressionTree = m_cParser.Parse(result);
}
catch (Exception ex)
{
    ex.Message();
}

在C#代码之上,方法 Parse 检查输入参数。我会知道公式字符串返回true或false。我正在使用 lv.parsenet.dll
我在哪里可以找到这样的库来检查Java中的公式

谢谢大家

1 个答案:

答案 0 :(得分:0)

您可以将表达式重写为

(TL_HS_NGUNG_LUONGKY1 == 1)? 0: TL_HS_K_DC_KY1 * NS_HSL * TL_HS_TL_TTDV;

由于它成为javascript表达式,您可以使用它如下

public static void main(String[] args) throws ScriptException, MalformedURLException, IOException {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");
    engine.getContext();
    engine.eval("TL_HS_NGUNG_LUONGKY1=10");
    engine.eval("TL_HS_TL_TTDV=10");
    engine.eval("TL_HS_K_DC_KY1=20");
    engine.eval("NS_HSL=20");
    Object result = engine.eval("(TL_HS_NGUNG_LUONGKY1 == 1)? 0: TL_HS_K_DC_KY1 * NS_HSL * TL_HS_TL_TTDV;");
    System.out.println(result);
}

或者使用名为Shy-Ta的外部库

public static void main(String[] arg){
    ExpressionsEvaluator evalExpr = new ExpressionsBuilder("IF(TL_HS_NGUNG_LUONGKY1 == 1, 0, TL_HS_K_DC_KY1 * NS_HSL * TL_HS_TL_TTDV)").build();
    Map<String, Object> variables = new HashMap<String, Object>();
    variables.put("TL_HS_NGUNG_LUONGKY1", 10);
    variables.put("TL_HS_K_DC_KY1", 10);
    variables.put("NS_HSL", 1);
    variables.put("TL_HS_TL_TTDV", 12);
    System.out.println(evalExpr.eval(variables));

}