表达式的问题 有没有可以把例如这样的东西String s="1*2-3+5*6/2";直接转换为结果的类库?或者是找一种最简单的方法来算类似这样的表达式。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该 没有.. , 不过你在个只能 用for循环 得到每个字节然后判断是否为数字,最后在运算, 很麻烦 这个应该没有现成的,数据结构讲栈的一章里,还有编译原理里讲到了算符优先算法,如果你想解析表达式,可以考虑使用那个算法,我只用C#和C++实现过,没有Java版的 Java好像没有提供类似于eval的方法。不过Javascript倒是有JDK6:import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;public class EvalTest { public static void main(String[] args) throws Exception { System.out.println(eval("1*2-3+5*6/2")); } public static Object eval(String str) throws Exception { ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine eng = factory.getEngineByName("javascript"); return eng.eval(str); }} 下面的例子不要求jdk1.6以上,不过要添加bsf.jar,js.jar,commons_logging.jarimport org.apache.bsf.BSFException;import org.apache.bsf.BSFManager;public class Javascript { public static void main(String[] args) { BSFManager bsfmgr = new BSFManager(); try { String s ="2*3+11-6/3"; Object obj=bsfmgr.eval("javascript","",0,0,s); System.out.println(obj); } catch (BSFException e) { e.printStackTrace(); } }} 怎样在点击一个按钮之后在它的下方并紧贴按钮下边界产生一个Jwindow 如何在一个shell(窗口容器类)中调用另一个用VE画好生成的shell? JCeator 没有设置断点的地方?? 有谁用过这东东....(马上结贴) 一个关于进制转换问题. struts问题探讨(不知道低级不低级),求解决方案! 如何用程序打开文件 最近想着手java,各位建议一下学java哪书好点? 请问用JDBC连接MySql数据库可以连接本地的文件吗? 如何在整个程序中截获Key事件? 小程序编译不通,帮忙纠错! 求一个指定次数的字符串替换函数或者代码 请教关于导入解析excel的问题
然后判断是否为数字,最后在运算, 很麻烦
如果你想解析表达式,可以考虑使用那个算法,我只用C#和C++实现过,没有Java版的
不过Javascript倒是有
JDK6:import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;public class EvalTest { public static void main(String[] args) throws Exception {
System.out.println(eval("1*2-3+5*6/2"));
} public static Object eval(String str) throws Exception {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine eng = factory.getEngineByName("javascript");
return eng.eval(str);
}
}
import org.apache.bsf.BSFException;
import org.apache.bsf.BSFManager;
public class Javascript {
public static void main(String[] args) {
BSFManager bsfmgr = new BSFManager();
try {
String s ="2*3+11-6/3";
Object obj=bsfmgr.eval("javascript","",0,0,s);
System.out.println(obj);
} catch (BSFException e) {
e.printStackTrace();
}
}}