一直被一个java问题困惑。
比如:String a="3+2";
如何执行字符串a中的算术。
又比如:
int i=0;
int y=3;
String a="i+y";
如果把字符串a中的2个变量相加得到3呢?
查了一下javascript中有个eval()的函数可以实现上面的功能。
但是在java中如何实现呢?
请大家帮忙一起解决,发现这个问题满有意思的!

解决方案 »

  1.   

    int i=0;
    int y=3;
    String a=i+y+"";
    这样就OK了!
      

  2.   

    String a="i+y";
    是外部定义的函数,是读进来的。
      

  3.   

    可以利用 java 的功能,我以前做的就是构造一个 class 文件,然后编译,load ,invoke ,就行了,苦于 class 被 load 后就不能 unload,可能会占用不少内存,不过 classloader 在 gc 的时候,load 的 class 应该会被同样 gc。
      

  4.   

    看《深入JAVA虚拟机》,有个概念先。
      

  5.   

    如果只单纯的是一种运算符的话,通过反射机制或者splits()可以简单的实现~~~
      

  6.   

    可以做一个编译原理中的表达式分析功能,如果只有算术四则运算的话,那么思路简单点.定义2个栈:
      SignStack //存放运算符
      NumStack  //存放运算数利用2个栈分析字符串,就可以了,具体可以找本编译原理的书看看.
      

  7.   

    这个就是写一个解释程序吧,C要这样也困难,
    javascript是解释执行,当然可以再运行中宏替换
      

  8.   

    如果你不想自己写解释程序, haha1903(中国人) 的方法不错,直接调编译器来编译执行,这个例子就是JSP,JSP先转换为.java文件,再编译执行
      

  9.   

    如果是 String = "1 + 9 / 2"; 呢
      

  10.   

    如果真的做成那样,不会发生歧义吗?
    可以这样:
    String str = "" + i + j;
      

  11.   

    看看 EL JSP 表达式语言.
    ${ i+y }
      

  12.   

    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;}这种可以?
      

  13.   

    给你个例子,刚写的/*
     * 创建日期 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));
    }
    }
      

  14.   

    java中有一个包是专门用来调用javascritp的
    导入之后估计就可以调用eval()函数了