问一个很有意思又很难的java问题,如果能回答出来估计真的是高高手了!

asweiren 2005-06-24 09:52:06
一直被一个java问题困惑。
比如:String a="3+2";
如何执行字符串a中的算术。
又比如:
int i=0;
int y=3;
String a="i+y";
如果把字符串a中的2个变量相加得到3呢?
查了一下javascript中有个eval()的函数可以实现上面的功能。
但是在java中如何实现呢?
请大家帮忙一起解决,发现这个问题满有意思的!
...全文
414 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
J_2004 2005-06-25
  • 打赏
  • 举报
回复
java中有一个包是专门用来调用javascritp的
导入之后估计就可以调用eval()函数了
fengyun1314 2005-06-25
  • 打赏
  • 举报
回复
分析一下了,如果是字母的就当作变量处理,如果是数据的就进行运算了,具体还要自己去做做才可以了
mofeir 2005-06-24
  • 打赏
  • 举报
回复
看《深入JAVA虚拟机》,有个概念先。
asweiren 2005-06-24
  • 打赏
  • 举报
回复
能具体写出来吗?谢谢
haha1903 2005-06-24
  • 打赏
  • 举报
回复
可以利用 java 的功能,我以前做的就是构造一个 class 文件,然后编译,load ,invoke ,就行了,苦于 class 被 load 后就不能 unload,可能会占用不少内存,不过 classloader 在 gc 的时候,load 的 class 应该会被同样 gc。
asweiren 2005-06-24
  • 打赏
  • 举报
回复
看来这能这样了。谢谢楼上的
ddboy 2005-06-24
  • 打赏
  • 举报
回复
自己做分析器,没有其它办法

asweiren 2005-06-24
  • 打赏
  • 举报
回复
String a="i+y";
是外部定义的函数,是读进来的。
chuanyuan88 2005-06-24
  • 打赏
  • 举报
回复
楼上正解
hadecsdn 2005-06-24
  • 打赏
  • 举报
回复
int i=0;
int y=3;
String a=i+y+"";
这样就OK了!
haha1903 2005-06-24
  • 打赏
  • 举报
回复
给你个例子,刚写的

/*
* 创建日期 2005-6-24
*/
package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import sun.tools.javac.Main;

/**
* @author c44196
*/
public class Test {
public static void main(String[] args) throws Exception {
String s = "public class Test3 {public static int i=3+4;}";
File file = new File("Test3.java");
FileOutputStream fos = new FileOutputStream(file);
fos.write(s.getBytes());
fos.close();
System.out.println(file.getPath());
Main main = new Main(System.out, "javac");
main.compile(new String[] { file.getPath() });
ClassLoader loader = new ClassLoader() {
protected Class findClass(String name) throws ClassNotFoundException {
Class c = null;
try {
File file = new File("Test3.class");
byte[] bytes = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytes);
fis.close();
c = defineClass(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return c;
}
};
Class c = loader.loadClass("Haha");
Object obj = c.newInstance();
System.out.println(obj.getClass());
System.out.println(c.getField("i").get(obj));
}
}
张洪財 2005-06-24
  • 打赏
  • 举报
回复
public int Sadd(String Svariable1,String Svariable2)
{
int flag=String.indexOf("+");
int Ivariable1,Ivariable2;
variable1=String.subString(0,flag);
Ivariable1=Integer.parstInt(variable1);
variable2=String.subString((flag + 1));
Ivariable2=Integer.parstInt(variable2);
return Ivariable2+Ivariable1;

}

这种可以?
humanity 2005-06-24
  • 打赏
  • 举报
回复
看看 EL JSP 表达式语言.
${ i+y }
ben_na 2005-06-24
  • 打赏
  • 举报
回复
如果真的做成那样,不会发生歧义吗?
可以这样:
String str = "" + i + j;
discolt 2005-06-24
  • 打赏
  • 举报
回复
如果是 String = "1 + 9 / 2"; 呢
tanghuan 2005-06-24
  • 打赏
  • 举报
回复
如果你不想自己写解释程序, haha1903(中国人) 的方法不错,直接调编译器来编译执行,这个例子就是JSP,JSP先转换为.java文件,再编译执行
tanghuan 2005-06-24
  • 打赏
  • 举报
回复
这个就是写一个解释程序吧,C要这样也困难,
javascript是解释执行,当然可以再运行中宏替换
xtaotao 2005-06-24
  • 打赏
  • 举报
回复
可以做一个编译原理中的表达式分析功能,如果只有算术四则运算的话,那么思路简单点.

定义2个栈:
SignStack //存放运算符
NumStack //存放运算数

利用2个栈分析字符串,就可以了,具体可以找本编译原理的书看看.
DreamDragon_NEU 2005-06-24
  • 打赏
  • 举报
回复
如果只单纯的是一种运算符的话,通过反射机制或者splits()可以简单的实现~~~

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧