java把字符串变成代码 java把字符串变成代码的方法

java怎么把一段字符串当做代码来执行

在javascript中eval()可以实现字符串转代码,java中需要使用动态编译。

创新互联建站是一家专注于网站建设、成都网站制作与策划设计,普兰网站建设哪家好?创新互联建站做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:普兰等地区。普兰做网站价格咨询:028-86922220

把获得的字符串写入一个临时文件中,然后编译它,在调用其中的函数。

我们把要转换的字符串构造一个完整的类:如果方法是有返回值的.则:

public object eval(string str){

//生成java文件

string s = "class temp{";

s += "object rt(){"

s += "myclass mc = new myclass();"

s += " return mc."+str+"();";

s += "}"

s +="}";

file f = new file("temp.java");

printwriter pw = new printwriter(new filewriter(f));

pw.println(s);

pw.close();

//动态编译

com.sun.tools.javac.main javac = new com.sun.tools.javac.main();

string[] cpargs = new string[] {"-d", "所在目录","temp.java"};

int status = javac.compile(cpargs);

if(status!=0){

system.out.println("没有成功编译源文件!");

return null;

}

//调用temp的rt方法返回结果:

myclassloader mc = new myclassloader();

class clasz = mc.loadclass("test.class",true);

method rt = clasz.getmethod("rt", new class[]{ string[].class });

return rt.invoke(null, new object[] { new string[0] });

//如果方法没有返回就直接调用

}

我们可以先写好多个重载的eval,有返回值和没有返回值的.以及可以传递参数的.

这样我们就可以用字符串转换为java的语句来执行.

这个字符串 2009.7 用java 怎么转换成date类型 , 求具体代码,具体代码

将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下: 一、定义一个字符串类型的时间; 二、创建一个SimpleDateFormat对象并设置格式; 三、最后使用SimpleDateFormat的parse方法将String类型的时间转换成Date类型的时间。 具体代码如下: String string = "二0一四-三-一漆"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = dateFormat.parse(string); System.out.println(date.toLocaleString().split(" ")[0]);//切割掉不要的时分秒数据 } catch (ParseException e) { e.printStackTrace(); } 介绍一下SimpleDateFormat:SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出

如何将字符串转换为java代码

Java实现字符串转换成可执行代码

使用commons的jexl可实现将字符串变成可执行代码的功能,我写了一个类来封装这个功能:

import java.util.Map;

import org.apache.commons.jexl2.Expression;

import org.apache.commons.jexl2.JexlContext;

import org.apache.commons.jexl2.JexlEngine;

import org.apache.commons.jexl2.MapContext;

/**

* 动态加载方法

*

*/

public class DyMethodUtil {

public static Object invokeMethod(String jexlExp,MapString,Object map){

JexlEngine jexl=new JexlEngine();

Expression e = jexl.createExpression(jexlExp);

JexlContext jc = new MapContext();

for(String key:map.keySet()){

jc.set(key, map.get(key));

}

if(null==e.evaluate(jc)){

return "";

}

return e.evaluate(jc);

}

}

调用

MapString,Object map=new HashMapString,Object();

map.put("testService",testService);

map.put("person",person);

String expression="testService.save(person)";

DyMethodUtil.invokeMethod(expression,map);

Java字符串转为字符

代码如下:

import java.util.Arrays;

import java.util.Scanner;

public class App {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

// 1.键盘录入一个字符串

String str = scanner.nextLine();

char[] chars = new char[str.length()];

// 2.将该字符串变成字符数组(不能使用toCharArray()方法)

for (int i = 0; i  str.length(); i++) {

char ch = str.charAt(i);

// 5.将字符数组中索引为偶数的元素变成'~'

ch = (i % 2 == 0) ? '~' : ch;

// 3.将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase()方法)

ch = (ch = 'A'  ch = 'Z') ? (char)(ch - 32) : ch;

chars[i] = ch;

}

// 4.如果第一位和最后一位的内容不相同,则交换

if (chars[0] != chars[chars.length - 1]) {

char ch = chars[0];

chars[0] = chars[chars.length - 1];

chars[chars.length - 1] = ch;

}

// 6.打印数组元素的内容

System.out.println(Arrays.toString(chars));

}

}

java 怎么把运算符字符串转化为字符?比如"1+2".有办法把字符串”+“变成运算符+的方法吗?

1、字符串“+”不能直接转化成运算符+进行操作,但可以换一个思路,只需要判断出来字符串中的+,然后把以它截取字符串,两端的内容应该就是需要进行做+运算的内容了,如“123+456”这个字符串,进行split截取,自己去运算就达到了同样的运算效果。

2、代码如下

public static void main(String args[])

{

String str="123+456";//定义一个随意的包含运算式的字符串

String a[]= str.split("\\+");//+是特殊字符,需要用\\转义,split返回string数组

System.out.println("截取结果:"+a[0]+"+"+a[1]);

int sum=Integer.parseInt(a[0])+Integer.parseInt(a[1]);

System.out.println("运算结果:"+sum);

}

3、运行效果

java字符串如何解析成能运行的java代码?

java字符串如何解析成运行的java代码

有些情况下,不得不动态运行Java代码,以便提供更加灵活的方式,以下代码可参考(在JDK 1.5+平台上运行通过):

public static void main(String[] args) {

int i = 10;

String code = "System.out.println(\"Hello World!\"+(13+2*5/3));";

code += "for(int i=0;i" + i + ";i++){";

code += " System.out.println(Math.pow(i,2));";

code += "}";

try {

run(code);

} catch (Exception e) {

e.printStackTrace();

}

}

private synchronized static File compile(String code) throws Exception {

File file = File.createTempFile("JavaRuntime", ".java", new File(System.getProperty("user.dir")));

file.deleteOnExit();

// 获得类名

String classname = getBaseFileName(file);

// 将代码输出到文件

PrintWriter out = new PrintWriter(new FileOutputStream(file));

out.println(getClassCode(code, classname));

out.close();

// 编译生成的java文件

String[] cpargs = new String[] { "-d",

System.getProperty("user.dir") + "\\WebRoot\\WEB-INF\\classes",

file.getName() };

int status = Main.compile(cpargs);

if (status != 0) {

throw new Exception("语法错误!");

}

return file;

}

private static synchronized void run(String code) throws Exception {

String classname = getBaseFileName(compile(code));

new File(System.getProperty("user.dir")

+ "\\WebRoot\\WEB-INF\\classes\\" + classname + ".class")

.deleteOnExit();

try {

Class cls = Class.forName(classname);

Method main = cls.getMethod("method", null);

main.invoke(cls, null);

} catch (Exception se) {

se.printStackTrace();

}

}

private static String getClassCode(String code, String className) {

StringBuffer text = new StringBuffer();

text.append("public class " + className + "{\n");

text.append(" public static void method(){\n");

text.append(" " + code + "\n");

text.append(" }\n");

text.append("}");

return text.toString();

}

private static String getBaseFileName(File file) {

String fileName = file.getName();

int index = fileName.indexOf(".");

String result = "";

if (index != -1) {

result = fileName.substring(0, index);

} else {

result = fileName;

}

return result;

}


文章标题:java把字符串变成代码 java把字符串变成代码的方法
分享URL:http://azwzsj.com/article/hehdoi.html