자바 논리 식 계산 및 판단

3645 단어 JAVASE
package com.cyb.regex;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.cyb.collection.utils.RandomUtils;
import com.cyb.context.TimeContext;

import sun.tools.tree.Expression;

/**
 *    : iechenyb
* :
* : 2018 9 11 */ public class { Log log = LogFactory.getLog( .class); public static void test() { MessageFormat mf = new MessageFormat("aaa{0}{0}", Locale.US); Object arr[] = { "he" }; System.out.println(mf.format(arr)); String booleanString = "{0}>1 && {0}<=5"; System.out.println(Boolean.valueOf(MessageFormat.format(booleanString, 6))); System.out.println(Boolean.valueOf(MessageFormat.format(booleanString, 2))); String expression = "value>1 && value<=5"; Boolean rs = assertExpressTrue("2", expression); for (int i = 1; i < 8; i++) { rs = assertExpressTrue(i + "", expression); System.out.println(i + ",rs=" + rs); } } static List expressions = new ArrayList(); static{ //expressions.add("110% && value<60%");// //expressions.add("value>0.01 && value<0.65"); //expressions.add("value>1 && value<=5"); //expressions.add("value>1 || value<=5"); //expressions.add("(value>1 && value<=5)||value > 10"); } static List arithmetics = new ArrayList(); static{ arithmetics.add("10 * 2 + 6 / (3 - 1)"); arithmetics.add("1/100+10"); arithmetics.add("2*3+5*2/100"); } public static void main(String[] args) throws InterruptedException { TimeContext.recordTimeStart(); test(); int i=0; while(i<10){ i++; for(String ex:expressions){ String param = String.valueOf(RandomUtils.getNum(1, 100)*1.0/100); boolean res = assertExpressTrue(String. valueOf(param), ex); System.out.println(" :"+ex+"\t :"+param+"\t"+res); } } for(String ex:arithmetics){ String result = calStringExpression(ex); System.out.println(" :"+ex+"\t :"+result); } TimeContext.calExecuteTime(); } /** * * @author: Longjun * @Description: ${money>=2000&&money<=4000} * "money>=2000&&money<=4000", * @date:2016 3 21 11:25:32 */ public static Boolean assertExpressTrue(String value, String expression) { String el = expression; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.put("value", value); boolean eval = false; try { eval = (boolean) engine.eval(el); } catch (ScriptException e) { e.printStackTrace(); } return eval; } public static String calStringExpression(String expression) { ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("js");//nashorn try { String result = String.valueOf(scriptEngine.eval(expression)); return result; } catch (ScriptException e) { e.printStackTrace(); return ""; } } }

좋은 웹페이지 즐겨찾기