获取Java源文件的包

时间:2010-05-17 11:37:12

标签: java regex parsing

我的目标是找到一个Java源文件的包(作为字符串),以纯文本形式给出,但尚未在文件夹中排序。

我不能只在文件中找到关键字package的第一个实例,因为它可能出现在注释中。所以我在考虑两种选择:

  • 逐字扫描文件,维护扫描仪的“内部注释”标记。第一次遇到package关键字而不在评论中时,请停止扫描并报告结果。
  • 使用正则表达式 - 理论上应该是可行的,因为块注释在Java中没有下一个,但我尝试制作这样的正则表达式,结果证明它非常复杂 - 对我来说,至少。

这两种方法的另一个区别是,当我手动扫描时,我可以停止扫描,因为我可以确定package关键字不再出现,节省了一些时间...而且我不确定我能否用正则表达式做类似的事情。另一方面,决定“何时不再出现”is not necessarily simple,尽管我可以使用一些启发式方法。

我想听听有关此问题的任何意见,欢迎任何有关正则表达式的帮助。我的解决方案也是用Java编写的。

编辑:对于那些建议实际解析文件的人 - 这绝对是一个可行的选择,谢谢你,但是我觉得解析整个文件只是一个包太过分了。如果没有更简单的选择,我会这样做。

2 个答案:

答案 0 :(得分:6)

我通过使用java解析器解决了这个问题。为了我的目的,javaparser是最合适的。

CompilationUnit cu = JavaParser.parse( file );
String packageName = cu.getPackage().getName().toString();

答案 1 :(得分:1)

您可以使用实际的java源解析器,例如javaparser。它提供了正确解析的java文件,无需重新发明java解析器或使用穷人的解析器(正则表达式)。

我看到的唯一缺点是,您可能希望在找到包后立即停止解析,并避免解析文件的其余部分。有各种各样的,有点hacky的方法可以实现这一点,但我建议你在考虑这个之前考虑整个文件的性能。