当前位置: 代码迷 >> J2EE >> ,用正则表达式分析java代码,求包名和公共类名
  详细解决方案

,用正则表达式分析java代码,求包名和公共类名

热度:73   发布时间:2016-04-22 03:06:48.0
求助,用正则表达式分析java代码,求包名和公共类名。
我要将用户上传的java代码进行自动编译和测试,需要提取出代码里的包名和公共类名。
比如提取package java.ts.code;里的java.ts.code
还要提取公共类名作为文件名,生成.java文件以保存代码和编译
哪位熟正则表达式的兄弟请指教下,谢谢!

------解决方案--------------------
这个最好使用反射了,
可以先javac一下吗,而且Java6提供了API做这些事情了。

然后ClassLoader load classe,什么信息都得到了。
------解决方案--------------------
Java code
import java.util.regex.*; public class Test{     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 "";    }}
  相关解决方案