【发布时间】:2011-02-20 09:01:48
【问题描述】:
我的目标是找到 Java 源文件的包(作为字符串),以纯文本形式给出并且尚未在文件夹中排序。
我不能只在文件中找到关键字package 的第一个实例,因为它可能出现在注释中。所以我在考虑两种选择:
- 逐字扫描文件,为扫描仪维护一个“inside-a-comment”标志。第一次遇到不在评论中的
package关键字时,停止扫描并报告结果。 - 使用正则表达式 - 理论上应该是可行的,因为块 cmets 在 Java 中没有下一步,但我尝试制作这样的正则表达式,结果证明它相当复杂 - 至少对我来说是这样。
这两种方法的另一个区别是,手动扫描时,当我可以确定package 关键字不再出现时,我可以停止扫描,从而节省一些时间......我不确定我能做些什么与正则表达式类似。另一方面,“何时不再出现”的决定is not necessarily simple,尽管我可以为此使用一些启发式方法。
我想听听有关此问题的任何意见,并欢迎任何有关正则表达式的帮助。我的解决方案也是用 Java 编写的。
编辑: 对于那些建议实际解析文件的人 - 这绝对是一个可行的选择,谢谢,但我觉得只为包解析整个文件有点矫枉过正。如果没有更简单的选择,我会这样做。
【问题讨论】:
-
包声明(例如,package graphics;)必须是源文件的第一行。 (java.sun.com/docs/books/tutorial/java/package/createpkgs.html) 所以你要么在评论中,要么在空白或包装声明中(如果存在)。希望这会有所帮助。
-
@Anton:其实注解可能会先出现,可能有很多,如果我没记错的话,它们里面还可以包含表达式:(