我要将用户上传的java代码进行自动编译和测试,需要提取出代码里的包名和公共类名。
比如提取package java.ts.code;里的java.ts.code
还要提取公共类名作为文件名,生成.java文件以保存代码和编译
哪位熟正则表达式的兄弟请指教下,谢谢!
比如提取package java.ts.code;里的java.ts.code
还要提取公共类名作为文件名,生成.java文件以保存代码和编译
哪位熟正则表达式的兄弟请指教下,谢谢!
解决方案 »
- 如何监控mysql表记录变化
- Spring+Hibernate 发布到Tomcat 一起动就报这个错求大神帮忙解决
- 小软件怎么保存数据?
- 如何使用java将word文件转换成flash文件?
- myeclipse里面的Maven编译有错!
- Struts2中的单态问题?
- 新手的困惑,老鸟都是怎么处理的
- struts-config.xml 必须放在 WEB-INF下吗,放在src目录下怎么读取
- 为什么一定要这样写?(hibernate)
- 关于package、import的小问题
- hibernate sql语句在页面上显示的问题 加急50分
- QQ邮箱越来越神奇了,附件也可以直接拖入,大家来猜猜它是怎么实现的?
可以先javac一下吗,而且Java6提供了API做这些事情了。然后ClassLoader load classe,什么信息都得到了。
public static void main(String args[]) {
String str="//package java.ts.code;\n"
+"package java.ts.code;\n"
+"import java.util.regex.*;\n "
+"import java.util.*;\n"
+"//public class Test\n"
+"public class Test extends MyClass{ \n"
+"public static void main(String args[]) {\n"
+" String str=\"packege org.myfile\"\n"
+".....";
System.out.println("Packege name: "+getPackage(str));
System.out.println("Public class name: "+getPublicClass(str)); }
//下面的两个方法有一定的局限性,要求package语句和public class语句是一行的开始.
//也就是说,语句之前可以有空白字符,但不能有注释.比如:/*abc */package abc,这样是提不出来的.
//
public static String getPackage(String fileStr){
String regex="(?im)^\\s*package\\s+([^;]+);";
Matcher m=Pattern.compile(regex).matcher(fileStr);
if(m.find()){
return m.group(1).trim();
}
return "";
}
public static String getPublicClass(String fileStr){
String regex="(?m)^\\s*public\\s+class\\s+(\\w+)\\b";
Matcher m=Pattern.compile(regex).matcher(fileStr);
if(m.find()){
return m.group(1).trim();
}
return "";
}
}F:\java>java Test
Packege name: java.ts.code
Public class name: Test