「java类似eval」Java类似nrm工具
本篇文章给大家谈谈java类似eval,以及Java类似nrm工具对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java里面有没有类似JavaScript中的evel函数的方法
- 2、Java中有没有类似于eval()的函数?目的是计算一个字符串类型的数学表达式的值
- 3、java中有没有像js的eval一样的函数
- 4、Java求助:如何判断某对象是否存在?如果不存在,创建该对象
- 5、java eval是甚么表达式都能计算的?
java里面有没有类似JavaScript中的evel函数的方法
package mathTools;
/**
* Eval.java
*
* Created on 2006年4月10日, 下午3:46
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*
* 支持运算符:+ - * / % ] [ ! | =
* 其中:
* ] 表示大于等于
* [ 表示小于等于
* ! 表示不等于
* | 表示或
* & 表示与
* = 表示是否等于
*
* 支持函数:sqrt,square,ceil,sin,cos,asin,acon.tan.atan,log,exp 具体含义见 calFunction 代码
*
*/
/**
*
* @author Trumplet
*
*/
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Eval{
public static String OPTS="+-*/%][!|=#";
public Object calculate(String expression) throws ExpressionException{
try {
Stack Opts=new Stack();
Stack Values=new Stack();
String exp=expression+"#";
int nCount=exp.length(),nIn,nOut,nTemp;
Opts.push("#");
String temp="",optOut="",optIn="",value1="",value2="",optTemp="",opt="",temp1="";
int nFun=0;
boolean isFun=false;
for(int i=0;inCount;){
nTemp=0;
opt=exp.substring(i,i+1);
isFun=false;
temp1="";
while(inCount){
if(!temp1.equals("")){
if(opt.equals("(")){
nFun++;
isFun=true;
} else if(opt.equals(")")){
nFun--;
}
}
if((nFun0)||((!isFun)this.isValue(opt))){
temp1+=opt;
nTemp++;
opt=exp.substring(i+nTemp,i+nTemp+1);
} else{
if(isFun){
temp1+=opt;
nTemp++;
}
break;
}
}
if(temp1.equals("")){
temp=opt;
} else{
temp=temp1;
}
if(nTemp0){
i=i+nTemp-1;
}
temp=temp.trim();
if(this.isValue(temp)){
temp=this.getValue(temp);
Values.push(temp);
i++;
} else{
optIn=Opts.pop().toString();
nIn=this.getOptPriorityIn(optIn);
nOut=this.getOptPriorityOut(temp);
if(nIn==nOut){
i++;
} else if(nInnOut){
String ret="";
value1=Values.pop().toString();
value2=Values.pop().toString();
ret=String.valueOf(this.calValue(value2,optIn,value1));
Values.push(ret);
} else if(nInnOut){
Opts.push(optIn);
Opts.push(temp);
i++;
}
}
}
return Values.pop();
} catch(ExpressionException eE) {
throw eE;
} catch(Exception e) {
throw new ExpressionException("表达式"+expression+"格式非法!");
}
}
protected int getOptPriorityOut(String opt)throws ExpressionException{
if(opt.equals("+")){
return 1;
} else if(opt.equals("-")){
return 2;
} else if(opt.equals("*")){
return 5;
} else if(opt.equals("/")){
return 6;
} else if(opt.equals("%")){
return 7;
} else if(opt.equals("")){
return 11;
} else if(opt.equals("")){
return 12;
} else if(opt.equals("]")){
return 13;
} else if(opt.equals("[")){
return 14;
} else if(opt.equals("!")){
return 15;
} else if(opt.equals("|")){
return 16;
} else if(opt.equals("")) {
return 23;
} else if(opt.equals("=")) {
return 25;
} else if(opt.equals("#")) {
return 0;
} else if(opt.equals("(")){
return 1000;
} else if(opt.equals(")")){
return -1000;
}
throw new ExpressionException("运算符"+opt+"非法!");
}
protected int getOptPriorityIn(String opt) throws ExpressionException{
if(opt.equals("+")){
return 3;
} else if(opt.equals("-")){
return 4;
} else if(opt.equals("*")){
return 8;
} else if(opt.equals("/")){
return 9;
} else if(opt.equals("%")){
return 10;
} else if(opt.equals("")){
return 17;
} else if(opt.equals("")){
return 18;
} else if(opt.equals("]")){
return 19;
} else if(opt.equals("[")){
return 20;
} else if(opt.equals("!")){
return 21;
} else if(opt.equals("|")){
return 22;
} else if(opt.equals("")) {
return 24;
} else if(opt.equals("=")) {
return 26;
} else if(opt.equals("(")){
return -1000;
} else if(opt.equals(")")){
return 1000;
} else if(opt.equals("#")){
return 0;
}
throw new ExpressionException("运算符"+opt+"非法!");
}
protected String getOPTS() {
return OPTS;
}
protected boolean isValue(String cValue){
String notValue=this.getOPTS()+"()";
return notValue.indexOf(cValue)==-1;
}
protected boolean isOpt(String value){
return this.getOPTS().indexOf(value)=0;
}
protected double calValue(String value1,String opt,String value2) throws ExpressionException{
try {
double dbValue1=Double.valueOf(value1).doubleValue();
double dbValue2=Double.valueOf(value2).doubleValue();
long lg=0;
if(opt.equals("+")){
return dbValue1+dbValue2;
} else if(opt.equals("-")){
return dbValue1-dbValue2;
} else if(opt.equals("*")){
return dbValue1*dbValue2;
} else if(opt.equals("/")){
return dbValue1/dbValue2;
} else if(opt.equals("%")){
lg=(long)(dbValue1/dbValue2);
return dbValue1-lg*dbValue2;
} else if(opt.equals("")){
if(dbValue1dbValue2)
return 1;
else
return 0;
} else if(opt.equals("")){
if(dbValue1dbValue2)
return 1;
else
return 0;
} else if(opt.equals("]")){
if(dbValue1=dbValue2)
return 1;
else
return 0;
} else if(opt.equals("[")){
if(dbValue1=dbValue2)
return 1;
else
return 0;
} else if(opt.equals("!")){
if(dbValue1!=dbValue2)
return 1;
else
return 0;
} else if(opt.equals("|")){
if(dbValue10||dbValue20)
return 1;
else
return 0;
} else if(opt.equals("")){
if(dbValue10dbValue20)
return 1;
else
return 0;
} else if(opt.equals("=")){
if(dbValue1==dbValue2)
return 1;
else
return 0;
}
}catch(Exception e) {
throw new ExpressionException("值"+value1+"或"+value2+"在进行"+ opt+"运算时非法!");
}
throw new ExpressionException("运算符"+opt+"非法!");
}
protected String getValue(String oldValue) throws ExpressionException{
String reg="^([a-zA-Z0-9_]+)\\(([a-zA-Z0-9_.()]+)\\)$";
if(this.isFunctionCal(oldValue)){
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(oldValue);
m.find();
return calFunction(m.group(1),m.group(2));
}
return oldValue;
}
protected boolean isFunctionCal(String value){
String reg="^([a-zA-Z0-9_]+)\\(([a-zA-Z0-9_.()]+)\\)$";
return value.matches(reg);
}
protected String calFunction(String function,String value) throws ExpressionException{
String lowerFun=function.toLowerCase();
double db=0;
try {
db=Double.valueOf(this.getValue(value)).doubleValue();
if(lowerFun.equals("log")){
return String.valueOf(Math.log(db));
} else if(lowerFun.equals("square")){
return String.valueOf(Math.pow(db,2));
} else if(lowerFun.equals("sqrt")){
return String.valueOf(Math.sqrt(db));
} else if(lowerFun.equals("sin")){
return String.valueOf(Math.sin(db));
} else if(lowerFun.equals("asin")){
return String.valueOf(Math.asin(db));
} else if(lowerFun.equals("cos")){
return String.valueOf(Math.cos(db));
} else if(lowerFun.equals("tan")){
return String.valueOf(Math.tan(db));
} else if(lowerFun.equals("atan")){
return String.valueOf(Math.atan(db));
} else if(lowerFun.equals("ceil")){
return String.valueOf(Math.ceil(db));
} else if(lowerFun.equals("exp")){
return String.valueOf(Math.exp(db));
}
}catch(Exception e) {
throw new ExpressionException("函数"+function+"值"+value+"非法!");
}
throw new ExpressionException("函数"+function+"不支持!");
}
public static void main(String[]args) {
Eval be=new Eval();
//String exp="sin(ceil(100))*29+20+30*3+0|0|1+11*5+2=2";
//String exp="sin(ceil(sqrt(100)))*29+20+30*3+0|0|1+11*5+2=2";
String exp="8/(3-8/3)";
try {
System.out.println(be.calculate(exp));
} catch(ExpressionException eE) {
System.out.println(eE.getMessage());
}
}
//表达式异常类代码:
public class ExpressionException extends Exception{
public ExpressionException(String msg) {
super(msg);
}
}
}
Java中有没有类似于eval()的函数?目的是计算一个字符串类型的数学表达式的值
有啊,脚本引擎
public class Test {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine se = manager.getEngineByName("js");
String str = "1+2*(3+6)-5/2";
Double result =(Double) se.eval(str);
System.out.println(result);
}
}
java中有没有像js的eval一样的函数
这个必须有的... 当然不全一样 对于eval解析json的...
net.sf.json.JSONObject obj = net.sf.json.JSONObject.fromObject(jsonStr);
返回的obj就是一个json对象
Java求助:如何判断某对象是否存在?如果不存在,创建该对象
java中没有类似js的eval功能。很难实现,为何不换个逻辑来做呢?
java eval是甚么表达式都能计算的?
eval()应当是javascript的函数,是把字符串转成表达式.通经常使用于动态产生表达式.不过不推荐使用,如果能用其它方法实现,就不要用,存在兼容问题,也有可能致使不可预测的结果.至于你说的甚么表达式能计算,经常使用的都没问题,不知道你要用到甚么?如果比较特殊,你可以写个小程序试试不就知道结果了.如果要在java中实现这个功能,要用1些特殊办法.不能直接使用.要末自己写函数,要末用第3方的API.由于这个方法不是java标准API中的.
关于java类似eval和Java类似nrm工具的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。