日期:2014-05-20  浏览次数:20752 次

一道JAVA编程题目
对一个Java文件进行格式化,要求:
 
1、每个import占一行
 
2、packagte占一行
 
3、类的声明部分占一行,以{结束;
 
4、每个成员变量占一行,缩进4个字符;
 
5、方法定义缩进4个字符,方法头占一行,以{结束;
 
6、方法中的每一句代码占一行,相当于方法再缩进4个字符;
 
7、for if while等里面的代码相对于本身要缩进4个字符;
 
8、方法的右括号和类右括号要分别和方法、类的定义对应。
 
可以参考Eclipse中的代码格式化功能。
 
题目的输入是要格式化的文件的路径,输出是包含格式化后的内容的文件。
 
 
 
例如原来的文件是这样:
 

import java.util.Hashtable;
 
public class MyObject<First,Second>{ private First first; private Second second; public First getFirst(){ return first; }
 
public void setFirst(First f){
first = f;
}
 
public Second getSecond(){
return second;
}
public void setSecond(Second s){
second = s;
}
 
}
 
格式化后变成:
 
import java.util.Hashtable;
 
public class MyObject<First,Second>{
  private First first;
  private Second second;
  public First getFirst(){
  return first;
  }
  public void setFirst(First f){
  first = f;
  }
 
  public Second getSecond(){
  return second;
  }
  public void setSecond(Second s){
  second = s;
  }
 
}






最好能加上注释,用到的类,还有主要方法的作用,谢谢







------解决方案--------------------
你没用过eclipse吗??ctrl+shift+f自动的!!!为什么不用!!
------解决方案--------------------
括号匹配用栈
缩进或者占一行之类的可以用pattern写正则式匹配
然后用stringBuilder之类的工具加工下重新输出就好了
具体实现交给下面的高手了
------解决方案--------------------
LZ真是一个有想法的青年,支持一下
------解决方案--------------------
曾经写过一个格式化代码的程序。其核心是分解字符串。每一行代码都要分解,分解后将有3种类型。注释,固定字符串,有效代码。每一行开始就要判断是否处于/*开头的注释中,如果是,除非这一行内有结束标记*/,否则整行就都是注释。格式化主要针对的是有效代码,字符串原封不动,注释顶多处理一下缩进。

后来以这个程序为基础,还作了个统计代码行数的工具。居然发现eclipse的统计代码行数的插件有问题。字符串中如果含有“/*”,则其后就当是注释处理了。虽然出现的可能性比较小,但是确实是问题,也不知道现在改了没有。