Java 有没有办法将多个变量声明转换为每行一个?
在Eclipse中,是否有一种自动转换方法:Java 有没有办法将多个变量声明转换为每行一个?,java,eclipse,code-formatting,Java,Eclipse,Code Formatting,在Eclipse中,是否有一种自动转换方法: int myX, myY, myZ; 。。。对此 int myX; int myY; int myZ; 我想我可以从“清理”和“成员排序顺序”首选项中执行此操作,但它不会将多个声明分解为每行一个。有办法吗 编辑:澄清一下,这与成员变量有关。没有内置的清理或格式化程序选项(这让我感到惊讶)。然而,编写一个插件来实现这一点并不十分困难。作为参考,您可以从开始。类org.eclipse.jdt.internal.ui.fix.VariableDecla
int myX, myY, myZ;
。。。对此
int myX;
int myY;
int myZ;
我想我可以从“清理”和“成员排序顺序”首选项中执行此操作,但它不会将多个声明分解为每行一个。有办法吗
编辑:澄清一下,这与成员变量有关。没有内置的清理或格式化程序选项(这让我感到惊讶)。然而,编写一个插件来实现这一点并不十分困难。作为参考,您可以从开始。类
org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp
看起来是一个可以作为示例和指南的潜在类。据我所知,eclipse中没有现成的此类功能
我假设您是一名java程序员,因此您最好编写一个简单的程序,解析此类模式的源代码,并根据需要将其转换为多行。然后在其上运行clean up,使其按要求正确格式化。虽然我不知道是否有一个函数可以执行此操作,但您只需按几下键即可获得类似的结果:
Ctrl-F
)将逗号空格序列替换为分号、空格和变量类型。确保范围设置为“选定行”,如以下屏幕截图所示:
Shift-Ctrl-F
)来解决此问题
Eclipse不提供这种现成的格式化功能。您可以使用
Checkstyle
plugin来检查这个和更多的编码标准
在Checkstyle配置文件中,像这样使用模块MultipleVariableDeclarations
<module name="Checker">
<module name="TreeWalker">
<property name="cacheFile" value="target/cachefile"/>
<property name="tabWidth" value="4"/>
...
<module name="MultipleVariableDeclarations"/>
...
</module>
</module>
使用-code\u split\u decl\u style-1
选项:
String fileName,
a,
b,
c;
String fileName;
String a;
String b;
String c;
使用-code\u split\u decl\u style-2
选项:
String fileName,
a,
b,
c;
String fileName;
String a;
String b;
String c;
您可以使用universalidentgui
在一个GUI工具中使用不同的命令行格式化工具和各种语言的配置
支票样式: Astyle:Astyle.sourceforge.net/ GC大代码:
UniversalIndentGUI:universalindent.sourceforge.net/Eclipse似乎没有为此提供功能,而且我还没有找到一个插件。但假设您可以访问awk,您可能会发现这个小awk脚本很有用:
{
if (match($0,/([a-z|A-Z|0-9|_]+)\s+(([a-z|A-Z|0-9|_]+)\s*,\s*)+([a-z|A-Z|0-9|_]+);/)) {
match($0,/(\s*[a-z|A-Z|0-9|_]+)\s+([^;]*)/,components);
split(components[2],vars,",");
for(i in vars) {
gsub (/'[[:cntrl:]]|[[:space:]]|\x20/,"",vars[i])
print components[1],vars[i]";"
}
}
else {
print $0;
}
}
它将完成所需的工作。假设您将其保存到文件script.awk中,您会这样调用它
awk -f script.awk target_file.java
注意:您必须将输出定向到备用文件,否则您的源将被覆盖(清空)
因此,如果您想一次性处理多个文件,您应该这样做(假设使用bash shell):
对于每个java文件,这将创建一个以.java.pr结尾的新文件,然后将这些文件移到以.java结尾的文件中
=========================编辑=================
只想补充一点,Eclipse中存在一些插件,它们在选定的区域上支持bash/awk脚本。请看这里:
(对于较新版本的Eclipse,可能是旧版)
这里还有:
因此,我的脚本加上其中一个插件可能会将请求的功能添加到Eclipse中。我不认为format可以为您做到这一点,尽管您可能能够创建一个格式化规则(您可以这样做吗?)您坚持Eclipse的答案吗?@irabxter我最感兴趣的是通过Eclipse实现这一点的方法,但是,如果另一个IDE是唯一的方法,我仍然希望听到它。您需要这样做多少次?i、 你这样做是为了多少变量?你有一个工具来实现这一点的目的是什么?(也就是说,为什么要在单独的行上声明变量?)这个方法在任何比最琐碎的文件更大的文件中都是无用的。我会让查找和替换步骤成为一个正则表达式,它会查找逗号加上可选的空格。我认为@e-Riz answer最终将是最好的解决方案,但对于这个问题,这是一个快速、简单的修复方法。谢谢。@Whiskyspider:我想你会发现,对于“数百个类文件中的数千个”使用这种方法是相当困难的。:)@skarist这不是一个能够自动在所有类中工作的解决方案,但它是以类为基础的——因为我已经准备好了格式化程序——它确实节省了时间。