我知道这很傻但我无法克服好奇心。是否可以编写一个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完成。
答案 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();
它将根据注释和字符串文字中的大括号修改缩进深度
答案 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项目的一部分。