从java项目中提取所有字符串

我有相当多的源文件,我需要解析并提取所有字符串文字,并将它们作为播放旧的Java常量放在一个文件中。
举个例子:

Label l = new Label("Cat"); 

会成为:

 Label l = new Label(Constants.CAT); 

Constants.java我会:

 public final static String CAT = "Cat"; 

我不希望字符串在属性文本文件中外部化。
一个原因是一致性和代码可读性。
另一个是我们的客户端代码使用GWT ,它不支持Java属性文本文件机制。

我可以写一些解析器(可能使用ant replace任务)?
但我想知道IDE已经自动执行此类操作。

要完成Peter Kelley的回答,您可以考虑为eclipse IDE提供AST解决方案。

然后,您可以编写一个AST程序来解析您的源代码并执行您想要的操作。

这个eclipse角文章中提供了一个完整的例子,还有eclipse帮助中的更多细节。
您可以在清单5中找到自动化在Eclipse JDT中嵌入域特定语言的 “就地翻译实现”部分的一些示例,以及GitHub项目中的多个示例 。

Eclipse会自动执行此操作。 右键单击该文件,选择“Source”,然后选择“Externalize strings”

这并不完全符合您的要求(将Constants.java文件中的字符串作为字符串),但使用的方法确实非常强大。 它将它们移动到属性文件中,该文件可以根据您的语言环境动态加载。 如您所建议的那样将它们放在单独的Java源文件中意味着您可以立即在应用程序中使用所有语言,或者根据区域设置提供不同的应用程序。

我们将它用于我们的应用程序,即使基本的东西必须用英语和日语发货 – 我们更复杂的应用程序有12种语言 – 我们不是一个小型的软件开发公司:-)。

如果你确实想要它们在Java文件中,尽管已经提到了这些缺点,编写一个程序来将属性文件转换为Java源文件比尝试从自由格式的Java源代码中提取字符串要容易得多。

您需要做的就是修改Accessor类以使用内置字符串(在单独的类中),而不是在运行时加载它们。

有一些很好的理由可以解释为什么你不想这样做。 除了事实上任何这样生成的文件(我不知道eclipse函数)不会区分你正在设置的字符串,例如,作为测试类中的构造函数args和你实际想要的东西常量,更大的问题是所有的公共静态韵母都将被编译到你的类中,如果你想改变类的行为,你不仅要改变持有常量的类,还要改变引用它的所有东西。

我完全承认Pax Diablo所说的话。 我们也在使用这个function。

当应用于类文件时,函数“Externalize strings”将创建两个文件,一个是Messages.class类,一个是属性文件messages.properties。 然后,它会将字符串文字的所有直接用法重定向到对Messages.get(String键)的调用,并使用您在“Ext.String”向导中为字符串输入的键。

顺便说一句:财产档案有什么坏处? 正如他所说,您只需更改属性文件,如果需要更改文本,则无需更改类。

另一个优点是:将字符串文字提取到属性文件中的方式使您可以自由地翻译您想要的任何语言的源语言, 而无需修改任何代码 。 属性文件加载器通过使用具有语言iso代码的相应文件自动加载目标语言文件。 因此,您不必担心代码运行的平台,它将自动选择适当的语言(几乎)。 有关其工作原理的详细信息,请参阅ResourceBundle类的文档。

您可能希望查看NetBeans中的Jackpot源转换引擎 ,该引擎允许您编写源转换的脚本。