자바 논리 식 계산 및 판단
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 "";
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 논리 식 계산 및 판단텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.