论坛首页 Java企业应用论坛

怎么在JAVA中运算表达式?

浏览 19437 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-09  
呵呵,这边有个小子用java 写的.
http://dev.csdn.net/Develop/article/28/75723.shtm
0 请登录后投票
   发表时间:2007-03-09  
简单的话,我记得jakarta commons JEXL可以搞定
0 请登录后投票
   发表时间:2007-03-09  
google javacc or antlr
0 请登录后投票
   发表时间:2007-03-09  
zeroxin 写道
呵呵,这些当然也是可以的,我的意思是说怎么在java里来实现,比如目前大部分的JDK1.4平台上用纯java方法来做。


使用Beanshell,估计是最合适你需求的。
它可以解释执行Java语法,当然也是纯Java实现的,一个很小的库。
0 请登录后投票
   发表时间:2007-03-09  
projectnibble.org
0 请登录后投票
   发表时间:2007-03-09  
自己生成class文件,编译,运行
一劳永逸
0 请登录后投票
   发表时间:2007-03-09  
呵呵,找本数据结构与算法的书吧。
只实现+-*/与括号的话很容易的,用逆波兰式,用不了200行代码。
ps:我这里也有个计算表达式值的代码,用正则式,编着玩的,效率比用逆波兰式的差很多。
http://eastsun.iteye.com/blog/55852
0 请登录后投票
   发表时间:2007-03-09  
其实很简单的,用sql语句select一下就出来了
0 请登录后投票
   发表时间:2007-03-09  
可以用rhino,java 6的javascript实现实际上就是把这个搬过来了。
java 代码
 
  1. double xxx;  
  2. Context cx = Context.enter();  
  3. try {  
  4.     Scriptable scope = cx.initStandardObjects();  
  5.     Object result = cx.evaluateString(scope, str, null1null);  
  6.     xxx = Context.toNumber(result);  
  7. finally {  
  8.     Context.exit();  
  9. }  
0 请登录后投票
   发表时间:2007-03-09  
fujohnwang 写道
简单的话,我记得jakarta commons JEXL可以搞定

附上测试代码:
import org.apache.commons.jexl.Expression;
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;

import junit.framework.TestCase;

public class JexlTest extends TestCase {
	public void test() throws Exception {

		//Create an expression object
		String jexlExp = "9*(1+2)";
		Expression e = ExpressionFactory.createExpression(jexlExp);

		// Create a context
		JexlContext jc = JexlHelper.createContext();

		// Now evaluate the expression, getting the result
		Object result = e.evaluate(jc);

		System.out.println("result:" + result);
		System.out.println("result type:" + result.getClass().getName());

		assertEquals(((Long) result).intValue(), 27);
	}
}

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics