Java数学表示式解析工具- jeval

这个包可以为我们提高高效的数学表达式计算。

举个例子:这个是我们策划给出的游戏命中率的一部份计算公式

是否命中=a命中率 – (b等级 – a等级) * (命中系数(6)* b闪避率 / 100)+32

为了好看点,我们把他变成:ahit-(blv-alv)*(6*beva/100)+32

Jeval就是用在这种情况下的!!!!

Jeval下载地址:http://www.oschina.net/p/jeval 目前最新版本是0.9.4 Beta

public class EvalTest {

	private static final double X_VALUE = 1.0;
	private static final double Y_VALUE = 270;

//	testJeval/testJeval2需要手動包裝變量,testJeval3增加了變量包裝方法
	public static void main(String[] args) throws Exception {
		testJeval();
		testJeval2();
		testJeval3();
	}

	private static void testJeval() throws Exception {
		String exp = "2 + (7-5) * 3.14159 * #{x} + sin(#{y})";

		// compile
		Evaluator eva = new Evaluator();

		eva.putVariable("x", Double.toString(X_VALUE));
		eva.putVariable("y", Double.toString(Y_VALUE));

		// evaluate
		double result = Double.parseDouble(eva.evaluate(exp));

		System.out.println(result);//-> 2.0
	}

	public static void testJeval2(){
		// 我们的游戏公式 ahit-(blv-alv)*(6*beva/100)+32
		String exp = "#{ahit}-(#{blv}-#{alv})*(6*#{beva}/100)+32";
		Evaluator eva = new Evaluator();
		try {
		/** * 添加变量到 Evaluator 类实例.  */
		eva.putVariable("ahit", "33");
		eva.putVariable("blv", "10");
		eva.putVariable("alv", "10");
		eva.putVariable("beva", "5");
		/** * 简单输出变量. */
		/*System.out.println(eva.evaluate("#{ahit}"));
		System.out.println(eva.evaluate("#{blv}"));
		System.out.println(eva.evaluate("#{alv}"));
		System.out.println(eva.evaluate("#{beva}"));*/
		//公式计算
		System.out.println(eva.evaluate(exp));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void testJeval3(){
		// 我们的游戏公式 ahit-(blv-alv)*(6*beva/100)+32
		String exp = "ahit-(blv-alv)*(6*beva/100)+32";
		Evaluator eva = new Evaluator();
		try {
		/** * 添加变量到 Evaluator 类实例.  */
		eva.putVariable("ahit", "33");
		eva.putVariable("blv", "10");
		eva.putVariable("alv", "10");
		eva.putVariable("beva", "5");

		//公式计算
		System.out.println(eva.evaluate(formatExpression(exp)));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static String formatExpression(String exp){
		//英文字母變量用#{ }包裝:如變量x,#{x}
		String re = "([a-zA-Z]+)";
		Pattern pattern = Pattern.compile(re);
		Matcher matcher = pattern.matcher(exp);
		StringBuffer sb = new StringBuffer();
		while(matcher.find()){
			matcher.appendReplacement(sb, "#{" + matcher.group(1) + "}");
		}
		matcher.appendTail(sb);
		return sb.toString();
	}

}
时间: 2024-08-05 11:51:40

Java数学表示式解析工具- jeval的相关文章

基于Java的简易表达式解析工具(二)

之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处理的工具类什么的. 这个Java的表达式解析的工具只用了5个类,而且写得也很简单明了,相信有一些编程经验的可以看懂这些处理的逻辑代码. 1.第一个类:ExpressionNodeType(表达式各个字符节点的类型枚举类) public enum ExpressionNodeType { Unknow

Java爬虫利器HTML解析工具-Jsoup

Jsoup简介 Java爬虫解析HTML文档的工具有:htmlparser, Jsoup.本文将会详细介绍Jsoup的使用方法,10分钟搞定Java爬虫HTML解析. Jsoup可以直接解析某个URL地址.HTML文本内容,它提供非常丰富的处理Dom树的API.如果你使用过JQuery,那你一定会非常熟悉. Jsoup最强大的莫过于它的CSS选择器支持了.比如:document.select("div.content > div#image > ul > li:eq(2). 包

Java:JSON解析工具-org.json

一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网址https://github.com/douglascrockford/JSON-java下载org.json源码,并将源码其加入到Eclipse中,即可调用. 2.查看相关的API文档,访问:https://github.com/douglascrockford/JSON-java. https

JSON解析工具-org.json使用教程

原文地址:http://www.open-open.com/lib/view/open1381566882614.html 一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网址https://github.com/douglascrockford/JSON-java下载org.json源码,并将源码其加入到Eclipse中,即可调用. 2.查看相关

JAVA - Sql解析工具fdb-sql-parser简单使用

由于想要解决Mybatis分页插件中count查询效率问题,因为order by很影响效率,所以需要一种方式处理sql,将order by 语句去掉. 试了好几个sql解析工具,最后选择了fdb-sql-parser. Maven依赖: <dependency> <groupId>com.foundationdb</groupId> <artifactId>fdb-sql-parser</artifactId> <version>1.

java二维码编码和解析工具类

用到两个jar包: QRCode.jar Qrcodeen.jar package com.banmacoffee.utils; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; imp

java 常用的解析工具

这里介绍两种 java 解析工具. 第一种:java 解析 html 工具 jsoup 第二种: java 解析 XML 工具 Dom4j jsoup jsoup是一个用于处理真实HTML的Java库.它提供了一个非常方便的API,用于提取和操作数据,使用最好的DOM,CSS和类似jquery的方法. 官网:https://jsoup.org/ 下载:https://jsoup.org/packages/jsoup-1.12.1.jar maven: <dependency> <!--

Java中XML解析工具范例

1.直接代码部分: 1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.util.List; 4 import org.jdom.Document; 5 import org.jdom.Element; 6 import org.jdom.input.SAXBuilder; 7 import org.xml.sax.InputSource; 8 9 /** 10 * 作用: XML解析工具类,其中的属性根据

Json解析工具Jackson(简单应用)

概述    Jackson库(http://jackson.codehaus.org),是基于Java语言的开源json格式解析工具,整个库(使用最新的2.2版本)包含3个jar包:    jackson-core.jar--核心包(必须),提供基于"流模式"解析的API.    jackson-databind--数据绑定包(可选),提供基于"对象绑定"和"树模型"相关API.    jackson-annotations--注解包(可选),提