我的目标是找到一个Java源文件的包(作为字符串),以纯文本形式给出,但尚未在文件夹中排序。
我不能只在文件中找到关键字package
的第一个实例,因为它可能出现在注释中。所以我在考虑两种选择:
package
关键字而不在评论中时,请停止扫描并报告结果。这两种方法的另一个区别是,当我手动扫描时,我可以停止扫描,因为我可以确定package
关键字不再出现,节省了一些时间...而且我不确定我能否用正则表达式做类似的事情。另一方面,决定“何时不再出现”is not necessarily simple,尽管我可以使用一些启发式方法。
我想听听有关此问题的任何意见,欢迎任何有关正则表达式的帮助。我的解决方案也是用Java编写的。
编辑:对于那些建议实际解析文件的人 - 这绝对是一个可行的选择,谢谢你,但是我觉得解析整个文件只是一个包太过分了。如果没有更简单的选择,我会这样做。
答案 0 :(得分:6)
我通过使用java解析器解决了这个问题。为了我的目的,javaparser是最合适的。
CompilationUnit cu = JavaParser.parse( file );
String packageName = cu.getPackage().getName().toString();
答案 1 :(得分:1)
您可以使用实际的java源解析器,例如javaparser。它提供了正确解析的java文件,无需重新发明java解析器或使用穷人的解析器(正则表达式)。
我看到的唯一缺点是,您可能希望在找到包后立即停止解析,并避免解析文件的其余部分。有各种各样的,有点hacky的方法可以实现这一点,但我建议你在考虑这个之前考虑整个文件的性能。