使用shell脚本进行Java代码格式化

时间:2009-07-16 14:20:43

标签: java unix shell scripting

我知道这很傻但我无法克服好奇心。是否可以编写一个shell脚本来格式化一段java代码?

例如,如果用户在代码中写入:

    public class Super{
    public static void main(String[] args){
    System.out.println("Hello world");
    int a=0;
    if(a==100)
    {
    System.out.println("Hello world");
    }
    else
    {
    System.out.println("Hello world with else");
    }
    }
}

我想写一个shell脚本,它会使代码像这样。

 public class Super
 {
  public static void main(String[] args)
  {
   System.out.println("Hello world");
   int a=0;
   if(a==100){
    System.out.println("Hello world");
   }
   else{
    System.out.println("Hello world with else");
   }
}

确切地说,我们应该更改花括号的格式。如果是try / catch或控制结构,我们应该将它改为同一行,如果它是函数/方法/类,它应该在下一行。我对sed和awk知之甚少,它可以很容易地完成这个任务。我也知道这可以用eclipse完成。

5 个答案:

答案 0 :(得分:2)

快速,有缺陷的尝试,但是对你的样本输入有效:

BEGIN {depth = 0;}
/{$/  {depth = depth + 1}
/^}/  {depth = depth - 1}
      {prefix = ""; for (i = 0; i < depth; i++) { prefix = prefix "  "} print prefix $0 ; }

这是一个awk脚本:将它放在一个文件中并执行

awk -f awk_script_file source_file

明显的缺陷包括:

  • 它不会像你想要缩进一样找到没有地方的地方

    if (foo)
      bar();
    
  • 它将根据注释和字符串文字中的大括号修改缩进深度

  • 它不会检测{braces后跟评论

答案 1 :(得分:1)

绝对有可能......我只是不明白你为什么要花时间去做呢? :]有足够的工具可以做到这一点,任何体面的IDE都提供了重新格式化源代码(包括Eclipse)的方法。

例如,要在Eclipse 3.4中进行格式化(在其他版本中应该类似),只需右键单击项目或文件,然后从菜单中选择“Source&gt; Format”。

如果您需要更改格式化代码的方式,只需转到“首选项&gt; Java&gt;代码样式&gt;格式化程序”并更改模板。据我所知,它在JDeveloper和NetBeans中非常相似。

答案 2 :(得分:1)

我认为这可以通过一个简单的'sed'脚本来完成。 使用1变量(bCount)存储'{'(左括号)的数量 - (减去)'}'的数量(结束括号) 然后我将浏览文件并根据使用的支撑的实际数量插入“标签”。 所以

public class Super{ //bCount=0
public static void main(String[] args){ //bCount=1
System.out.println("Hello world"); //bCount=2
int a=0; //bCount=2
....and so on

所以第0行的0个标签

第1行的1个标签

第3和第4行的2个标签,依此类推......

答案 3 :(得分:0)

查看CLI for Jalopy。 Jalopy是一个非常强大的源格式化器。

答案 4 :(得分:0)

考虑使用Jindent,这是一个“使用Emacs的简单Java缩进工具”。这是一个免费的shell脚本,它是伯克利Ptolemy项目的一部分。