Java 有没有办法将多个变量声明转换为每行一个?

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

在Eclipse中,是否有一种自动转换方法:

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这不是一个能够自动在所有类中工作的解决方案,但它是以类为基础的——因为我已经准备好了格式化程序——它确实节省了时间。