精华内容
下载资源
问答
  • ScriptEngineManagermanager=newScriptEngineManager(); ScriptEnginese=manager.getEngineByName("js"); Stringstr="表达式"; double类型 ...Doubleresult=(Double)se....Boolean result = (Boolean) se.eval(str...

    ScriptEngineManager manager = new ScriptEngineManager();

            ScriptEngine se = manager.getEngineByName("js");

            String str = "表达式";

    double类型

            Double result =(Double) se.eval(str);

    boolean类型

       Boolean result =  (Boolean) se.eval(str);
    展开全文
  • Java实现eval()方法,完成动态编译

    千次阅读 2017-09-02 14:41:06
    这里的动态编译不是java6中所说的动态编译,我看一个教程上面实现js中的eval()方法,也编译和运行了包含java代码的字符串。代码如下:import java.io.*;public class GetProcessDate { /* 获取进程数据-编译和...

    这里的动态编译不是java6中所说的动态编译,我看一个教程上面实现js中的eval()方法,也编译和运行了包含java代码的字符串。

    代码如下:

    import java.io.*;
    
    public class GetProcessDate {
        /*
        获取进程数据-编译和运行java代码
        相当实现于js中eval()函数的功能
        */
        public static void main(String[] args) throws Exception {
            //解释字符串中的内容,将其以java代码的形式执行,并打印出来
            String str="System.out.println(\"今晚的月色很美!\");";
            eval(str);
        }
    
        private static void eval(String str) throws Exception {
            /*由于java最小的执行单元是类,如果想要执行该语句,必须为其构建一个完整的类*/
            //1-使用StringBuilder拼接一个完整的Hello World程序
            StringBuilder strB=new StringBuilder(80);
            strB.append("public class Hello {");
            strB.append("public static void main(String[] args) {");
            strB.append(str);
            strB.append("}}");
            //2-将拼接好的字符串保存到一个Hello.java的文件里
            OutputStream out=new FileOutputStream("Hello.java");
            out.write(strB.toString().getBytes());
            out.close();
            System.out.println();
            //3-调用java进程来编译Hello.java
            Process javacProcess=Runtime.getRuntime().exec("javac Hello.java");
            //4-读取javac进程中的错误流信息
            InputStream error=javacProcess.getErrorStream();
            //读取流中的数据
            byte[] b=new byte[1024];
            //对每一个文件里的内容进行复制
            int len = -1;//表示已经读取了多少个字节,如果len返回-1,表示已经读到最后
            while ((len = error.read(b)) != -1) {
                String msg=new String(b,0,len);
                System.out.println(msg);
            }
            //关闭资源
            error.close();
            //5-调用java进程来运行Hello.clss
            Process javaProcess=Runtime.getRuntime().exec("java Hello");
            //6-读取java进程流中的信息
            InputStream info=javaProcess.getInputStream();
            while ((len = info.read(b)) != -1) {
                String msg=new String(b,0,len);
                System.out.println(msg);
            }
            info.close();
            //7-删除java和class文件
            new File("Hello.java").delete();
            new File("Hello.class").delete();       
        }
    }
    

    见证奇迹的时候到了:
    这里写图片描述

    Excited…
    这里主要用到了文件流,创建进程,还有Runtime。

    上图是人Runtime类中的一个执行进程的方法,Runtime没有构造器,属于单例模式,只能用Runtime.getRuntime();获得其对象。

    展开全文
  • 简易的Javaeval()函数

    千次阅读 2021-03-07 15:08:58
    Java eval()方法 Java eval()函数

     代码在最底部,请自行提取!

     代码说明:

    1.允许直接使用,如下:

    public class EvalTest {
        public static void main(String[] args) {
            String code = 
                    "int a = 1;" +
                    "int b = 2;" +
                    "System.out.println(a+b);";
            Eval eval = new Eval(code);
            eval.compiler();
            eval.run();
        }
    }

     结果如下:

       3为a+b之后的结果

     

    2.允许包含主类,如下:

    public class EvalTest {
        public static void main(String[] args) {
            final StringBuilder code = new StringBuilder();
            code.append("public class Hello {");
            code.append("public static void main(String [] args){");
            code.append("System.out.println(\"Hello World!\");");
            code.append("   }");
            code.append("}");
            Eval eval = new Eval(code.toString());
            eval.compiler();
            eval.run();
        }
    }

    结果:

    请注意,主类必须位于所有其他类的前面!!!

     

    3.允许指定某目录下的Java文件直接运行,如下:

    public class EvalTest {
        public static void main(String[] args) {
            Eval eval = new Eval("D:/Java/IDEAProject/ReviewJavaBasics/target/classes/","Test181.java");
            eval.compiler();
            eval.run();
        }
    }

    Test181.java内容如下:

    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.Scanner;
    
    public class Test181 {
    
        public static void main(String[] args) {
            new Test181().test1();
        }
    
        private void test1() {
            Runtime runtime = Runtime.getRuntime();
            try {
                Process process = runtime.exec("ping www.baidu.com");
                process.waitFor();
                try (Scanner scanner = new Scanner(process.getInputStream(), Charset.forName("GBK"));) {
                    while (scanner.hasNext()) {
                        System.out.println(scanner.nextLine());
                    }
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    结果:

    注意:

    在EvalTest中的 Eval eval = new Eval(路径,文件名);

    文件名允许指定非java文件,作为输入源,测试如下:

    public class EvalTest {
        public static void main(String[] args) {
            Eval eval = new Eval("D:/Java/IDEAProject/ReviewJavaBasics/target/classes/","zhw.txt");
            eval.compiler();
            eval.run();
        }
    }

    zhw.txt

    工作目录:

    运行结果:

    请注意,该Eval类有一个bug,就是不能运行,设置了包名的代码!!!

    public class Eval {
        //    文件名
        private String classname;
        private boolean isCompiler = false;
        //    扩展名
        private final static String fx = ".java";
        //    编码格式,由于是在windows下,故dos窗口为gbk格式
        private final Charset charset = Charset.forName("GBK");
        //    将要被执行的代码
        private final StringBuilder code = new StringBuilder();
        //    设置java文件所在的目录
        private String PATH = "D:/Java/Test";
    
        Eval(String code) {
            init(code);
        }
    
        Eval(String path, String name) {
            PATH = path;
            int doc = name.lastIndexOf(".");
            if (name.substring(doc).equals(".java")) {
                this.classname = name.substring(0, doc);
            } else {
                init(getCode(name));
            }
        }
    
    
        private void init(String code) {
            if (code.contains("public class ")) {
                this.code.append(code);
                initClassname();
            } else {
                initCode();
                this.code.append(code);
                endCode();
            }
            writeFile();
        }
    
        public void compiler() {
            try {
                Process exec = Runtime.getRuntime().exec("javac " + classname + fx, null, new File(PATH));
                StringBuilder compilerInfo = new StringBuilder();
                try (BufferedReader bf = new BufferedReader(
                        new InputStreamReader(exec.getErrorStream(), charset))) {
                    String line;
                    while ((line = bf.readLine()) != null) {
                        compilerInfo.append(line);
                        compilerInfo.append("\n");
                    }
                    if (compilerInfo.length() == 0) {
                        isCompiler = true;
                        System.out.println(classname + fx + " 编译成功!");
                    } else {
                        System.out.println("编译失败");
                        System.out.println(compilerInfo.toString());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void run() {
            if (!isCompiler) {
                System.out.println("编译失败,无法运行!");
                System.exit(0);
            }
            try {
                Process exec = Runtime.getRuntime().exec("java " + classname, null, new File(PATH));
                StringBuilder runInfo = new StringBuilder();
                try (BufferedReader bf = new BufferedReader(
                        new InputStreamReader(exec.getInputStream(), charset))) {
                    String line;
                    while ((line = bf.readLine()) != null) {
                        runInfo.append(line);
                        runInfo.append("\n");
                    }
                    System.out.println(classname + " 运行成功!");
                    System.out.println(runInfo.toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private String getCode(String name) {
            StringBuilder sb = new StringBuilder();
            try (BufferedReader bf =
                         new BufferedReader(
                                 new InputStreamReader(new FileInputStream(PATH + name)));) {
                String line;
                while ((line = bf.readLine()) != null) {
                    sb.append(line);
                    sb.append("\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb.toString();
        }
    
        private void writeFile() {
            try (PrintStream ps = new PrintStream(PATH + classname + fx, charset);) {
                ps.println(code.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private void initClassname() {
            String s = "public class ";
            int classnameStart = code.indexOf(s) + s.length();
            int classnameEnd = code.indexOf(" ", classnameStart);
            classname = code.substring(classnameStart, classnameEnd);
        }
    
        private void initCode() {
            code.append("public class Test {");
            code.append("    public static void main(String [] args){");
            classname = "Test";
        }
    
        private void endCode() {
            code.append("}");
            code.append("}");
        }
    }

     

    展开全文
  • java实现js中eval功能

    2012-11-06 08:35:23
    使用java来实现js中eval的功能,包括字符串的计算,判断真假等功能
  • java实现eval()方法

    千次阅读 2019-11-19 13:30:02
    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; /** * @author Administrator ... * 相当于实现于JS中eval()方法 */ public class...
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    /**
     * @author Administrator
     * 获取进程数据-编译和运行Java代码
     * 相当于实现于JS中eval()方法
     */
    public class DynCompile {
    	
    	public static void main(String[] args) throws Exception {
    		//解析字符串中的内容,将其以java代码的形式执行,并打印出来
    		String str = "System.out.println(\"输出文字!\");";
    		eval(str);
    	}
    	
    	public static void eval(String str) throws Exception{
    		/*由于java的最小执行单元是类,如果想要执行该语句,必须为其构建一个完整的类*/
    		//1-使用StringBuilder拼接一个完成的HelloWorld程序
    		StringBuilder strB = new StringBuilder(80);
    		strB.append("public class Hello{");
    		strB.append("public static void main(String[] args){");
    		strB.append(str);
    		strB.append("}}");
    		
    		//2-将拼接好的字符串保存到一个Hello.java的文件里
    		OutputStream out = new FileOutputStream("Hello.java");
    		out.write(strB.toString().getBytes());
    		out.close();
    		System.out.println();
    		
    		//3-调用java进程来编译Hello.java
    		Process javacProcess = Runtime.getRuntime().exec("javac Hello.java");
    		
    		//4-读取javac进程中的错误流信息
    		InputStream error = javacProcess.getErrorStream();
    		//读取流中的数据
    		byte[] b = new byte[1024];
    		//对每一个文件中的内容进行复制
    		int len = -1;
    		while((len=error.read(b))!= -1) {
    			String msg = new String(b,0,len);
    			System.out.println(msg);
    		}
    		//关闭资源
    		error.close();
    		
    		//5-调用java进程来运行Hello.class
    		Process javaProcess = Runtime.getRuntime().exec("java Hello");
    		
    		//6-读取java进程流中的信息
    		InputStream info = javaProcess.getInputStream();
    		while((len=info.read(b))!=-1) {
    			String msg = new String(b,0,len);
    			System.out.println(msg);
    		}
    		info.close();
    		
    		//7-删除java和class文件
    		new File("Hello.java").delete();
    		new File("Hello.class").delete();
    	}
    }
    
    
    展开全文
  • package test;... * 在java中利用动态编译实现eval, * * 我们知道, * * 在很多脚本语言中都有eval函数, * * 他可以把字符串转换成为表态式并执行 * * 也是就通俗意义上把字符串的表达式转
  • java 使用eval.jar解析公式

    千次阅读 2010-04-27 20:21:00
    eval.jar 需要到https://eval.dev.java.net/下载 --下面是示例使用,支持中文变量Expression exp = new Expression("(x + y)/2"); Map variables = new HashMap(); variables.put("x", new BigDecimal("4.3
  • Java中实现类似JavaScript中eval()函数相似的功能,同时使用实现的evel实现4个数计算24点的应用。
  • ScriptEngineManager manager = new ScriptEngineManager();...result = ( Boolean)se.eval(str); System.out.println(result); } catch (ScriptException e) { e.printStackTrace(); }
  • eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 语法 eval(string) 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() ...
  • Java 实现 JS的eval函数

    2019-10-07 15:28:30
    JS的eval 函数, 给个表达式做参数, 返回表达式的值。 Java的脚本引擎可以实现这个功能。 例子: 拼接一个字符串 \uxxxx, Unicode的十六进制编码, 然后把它打印出来。 即输入一个'\u5236' 字符串, 然后输出...
  • <code>package d;... java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "jse" is null at d/d.s.main(s.java:13) 求解</code></pre>  </p>
  • 今天在看到《Java疯狂讲义》中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能——可以动态运行一行或多行程序代码。例如:eval(“System.out.println(“hello world...
  • 1、启动Rserve服务(64位) ...2、使用source时尽量避免R语言脚本路径里不要有中文,如果文件中有设定路径的地方,一定记得使用/,而不\,否则,Rserve直接异常退出。 RConnection connection = null; try { co...
  • java中用eval

    2011-07-10 15:58:27
    public static void main(String[] args) { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("... System.out.println(se.eval("1+2*(3+4)").toStri
  • 方法是不能乱用的,在不适当的时候使用eval( ) 方法可能导致整个程序都会出问题的; 而new Function( ) 就没这么大问题。虽然new Function( ) 在任何情况下,构造的函数都是在全局作用域下直接工作的,但只...
  • import java.net.URI; import java.util.Arrays; import java.util.List; import javax.annotation.PostConstruct; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import ...
  • 我们知道,在很多脚本语言中都有eval函数,它可以把字符串转换为表达式并执行.如在javaScript中: var str = aid.value + ".style.top = 10;"  把一个id为"aid"的控制的值取出来加合并成一个字符串,如果aid的值是...
  • 场景: 类C中存有方法A()和B(),String str...主要用到java反射机制,动态调用的方法: a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{}) 其中,a为类的对象,str为要被调用的方法名 1、a...
  • Java中类似于eval()的函数?

    千次阅读 2015-09-15 23:10:40
    public class Test { public static void main(String[] args) throws ScriptException { ... Double result =(Double) se.eval(str); System.out.println(result); } }
  • 了解下java 使用Script脚本。看到篇不错的文章。就直接拉过来了。 原文地址:https://www.cnblogs.com/zouhao/p/3644788.html Java SE 6最引人注目的新功能之一就是内嵌了脚本支持。在默认情况下,Java SE 6只...
  • 在Python中有一个exec()函数,同样在JavaScript中有一个eval()函数,这两个函数有一个相似的特点,那就是可以在里面传入一段Python代码或者JavaScript代码,发现竟然可以运行该代码。 但是遗憾的是,Java中并不存在...
  • Java调用Python的方法

    2020-05-17 09:23:27
    Java调用Python的方法 方法一:Runtime.getRuntime() 首先,add_test.py代码如下 def add(a,b): return a + b res = add(3,4) print(res) Java代码: package first; import java.io.*; public class ...
  • java调用Groovy脚本

    万次阅读 2019-02-01 17:28:50
    一、使用 用 Groovy 的 GroovyClassLoader ,它会动态地加载一个脚本并执行它。GroovyClassLoader是一个Groovy定制的类装载器,负责解析加载Java类中用到的Groovy类。 先创建一个groovy脚本,非常简单,定义一个用于...
  • Groovy is a multi-faceted language for the Java platform. Apache Groovy是一种强大的、可选的类型化和动态语言,具有静态类型和静态编译功能,用于Java平台,目的在于通过简洁、熟悉和易于学习的语法提高开发...
  • 首先将执行的source语句如下 source(‘D:/xxx/xxx/xxx/py/test.R’) ,如果有函数...在Rstdio中的console中执行一遍,看看是否报错,不报错了以后,在Java中执行 RConnection connection = Rservel.getRConnectio...
  • Java调用R脚本的方法总结

    千次阅读 2018-08-01 18:56:07
    前言 R是一种非常方便易用的绘图、统计分析、ML算法设计方面的脚本语言。实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新...1)java调用R的方式有哪些,如何使用? ...
  • Java调用simulink

    千次阅读 2017-06-06 19:18:18
    Java通过engine.jar调用matlab及simulink。
  • Java调用Lua

    千次阅读 2019-04-09 17:30:26
    文章目录概述SciTE开发luasciTE 中文乱码idea开发lua常见问题windows上运行lua脚本比较输入的两个数字是否相等限制ip访问次数java代码调用lua脚本 概述 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,544
精华内容 20,617
关键字:

java调用eval

java 订阅