为大家推荐一款JAVA源代码排版与优化软件Jstyle,喜欢用VIM,记事本等简单工具写代码,或者Eclipse,notepad等自带的代码风格无法满足你挑剔的眼光时,又或者你拿到了一份别人在windows平台编码的代码但却在你的linux环境下无法查看其中的中文注释时,或许这款软件可以帮助你。
软件是我自己本人写的,起初只为做个工具供自己使用,但后一些额外功能的加入,便越写越多,同时也希望如果好的话也可以让别人使用,最后便决定认认真真做,以后贡献给开源社区。本心想做这么个东西应该挺容易的,计划10天完成的,但后来上手后才发现写这个比以前做网站,写其他程序都要复杂,因为必须要熟悉java所有的关键字,必须要理解字符编码这些,必须要处理好程序源代码中的每个特殊符号,引号,注释等等。并且以正确美观希望的排版方式输出来。。总之,做的过程很辛苦,整整花了16天的时间才写完,好在还是做完了,这也是本人大学期间写的的第四款小软件。软件采用java语言编写,安装使用都很简单,linux,windows平台都可以运行,需要的话我提供了附件下载。
功能简介:
1.支持6种代码风格,分别为:jayson,java,linux,gnu,ak,mini.
2.支持6种输入字符编码,分别为: gbk,utf-8,utf-16,utf16-le,utf16-be,big5.其中对含有BOM(这个不明白可以百度)的uncode编码可以进行自动识别,当源文件是含有BOM的uncode编码时,如果不指定输入编码,软件将进行自动检测(这个检测是不能保证100%正确的,因为火狐浏览器对字符编码的检测也不能保证100%正确,不过正确率很高,尤其当文件中含有中文字符时。所以如果源文件字符编码比较不常见时,请
自行指定输入编码)。
3.支持6种输出字符编码,同输入编码。
4.其他一些有用功能,比如增加头部注释,删除代码中的空行,自动给程序中的if(),for(),while()循环当只有一条语句时增添括号等,隔开双目运算符等等。
优点:
网上有很多优秀的代码美化软件,Jstyle与他们有什么不同呢。我之前一直使用一个开源软件Artistic Style(C++编写,支持java,c,c++),确实很优秀,很强大,但是当它碰到
int a;int b;if(){a=0;}
这种流水账语句时就无能为力了,这个也就是Jstyly的不存在的问题.其实jstyle也就是Artistic Style的java缩减版,不过实现却是一种新的思维,代码没有参考一句Artistic Style,而且c++我也不咋地。
缺点不足:
1.目前为第一版本,只支持单文件处理,批量源文件同时处理不支持,这个以后会改进。
2.目前只支持java源代码,c\c++不支持,这也是为啥软件名为Jstyle.
3.因为软件中检测一些java语法使用了开发者的思考模式,所以请确保源文件内不含有明显的错误,比如只有一半的引号,只有一个注释开始符“/*”而没有结束符,出现了奇数个括号等,将可能得不到预期效果,有时甚至给出源文件存在错误提示,所以对于不完整的程序可能得不到预期效果。,
4.目前程序没有进行公测,只是经我个人测试,所以可能会有BUG出现,欢迎大家及时指出。
功能详解及用法:
软件没有图形界面,采用命令行处理,基本用法如下。
linux平台为shell脚本,windows为.bat脚本
Usage : jstyle [options] Source.java
jstyle [command]
分为两种,上面一行为处理java源文件时的用法,jstyle+参数+源文件,第二行为命令模式,及不处理源文件(不带源文件),只是查看软件有关信息,jstyle+命令。详细情况可以使用时自行查看。
详细功能及参数说明:
1.代码风格:(-style=或者-s=, 默认风格为jasyon,S5)
(1) jayson:(或者S5,两次缩进为一个'\t')
- public class test
- {
- public void test()
- {
- int a=0;
- if(a>0)
- {
- a=1;
- }
- }
- }
(2) java:(或者S1,两次缩进为一个'\t')
- public class test {
- public void test(){
- int a=0;
- if(a>0){
- a=1;
- }
- }
- }
(3) linux:(或者S4,一次缩进为一个'\')
- public class test
- {
- public void test()
- {
- int a=0;
- if(a>0)
- {
- a=1;
- }
- }
- }
(4) gnu:(或者S2,两次缩进为一个'\t')
- public class test
- {
- public void test()
- {
- int a=0;
- if(a>0)
- {
- a=1;
- }
- }
- }
(5) ak:(或者S3,一次缩进为一个'\t')
- public
- abstract class test
- {
- public
- static void test()
- {
- int a=0;
- if(a>0)
- {
- a=1;
- }
- }
- public
- static int test1()
- {
- int a=0;
- if(a>0)
- {
- a=1;
- }
- return 1;
- }
- }
(6) mini:(或者S6,两次缩进为一个'\t')
- public class test{
- public void test(){
- int a=0;
- if(a>0)
- {
- a=1;
- }
- }
- }
2.输入字符编码:
参数:-charset_in= 或者 -ci=,可取的值为gbk,utf-8,utf-16,utf16-le,utf16-be,big5,目前只自动检测带BOM的uncode编码,如果不带BOM请自动手动指定,所以鼓励加入BOM,并且以utf-8编码保存源文件。
3.输出字符编码:
参数:-charset_out=或者 -co=,可取值同输入字符编码。
4.处理空白行(-aod=或者-a=).
可选值为delete和add(或者d和a),delete表示删除程序中的空白行,add表示在每个方法区域间增加空白行。由于程序处理是重新排版而非简单修整,所以有时会删除不必要的空行,这些都不是主要问题。
5.其他额外参数(--other=或者--o=,注意是以"--"开头,不是"-"开头,表示这个选项后面可以跟多个值,别且它们之间以冒号":"隔开):
(1) ah:给源文件增加头部注释说明,风格如下:
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * xxxx.java
- * @ author:
- * @ version:
- *
- * Directions:
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- */
(2) am:为每个方法区域增加注释,风格如下:
- /*
- *
- */
- public void run(){}
(3) dc:删除文件中所有注释。
(4) ra:修整数组,如下:
- int[]={1,2,3,4}
变为
- int[]={1,
- 2,
- 3,
- 4}
- int[][]={(1,2),(3,4),(5,6)}
变为
- int[][]={(1,2),
- (3,4),
- (5,6)}
如果不指定默认为9个元素后自动换行。
(5) ro:修整控制块。
- if(a>0||a>0&&a>0||a>0){
- .....
- }
变为
- if(a>0||
- a>0||
- a>0)
- {
- ....
- }
如果不指定默认3个关系运算后换行。
(6) rs:修整switch语句。
- switch(a){
- case 1:
- a;
- case 2:
- b;
- }
变为
- switch(a){
- case 1:
- a;
- case 2:
- b;
- }
(7) po:隔开双目运算符与两边元素。
- int a,b;
- a=a+b;
变为
- int a,b;
- a = a + b;
默认不隔开。
(8) pb:隔开{与前面的元素。
- public void run(){
变成
- public void run() {
默认不隔开。
(9) ps:隔开if,switch,for,while语句中"("与前面的元素。
- if(a>b){
- ....
- }
变为
- if (a>b){
- ....
- }
6.其他隐含功能。
(1)软件会对程序中所以流程跳转语句(if,else那些的)区域的"{}"自动检测,当区域只含有一条子语 句而没有添加"{}"时,软件会自动进行添加,这也是为了培养良好的编程习惯。比如
- if(a>b)
- System.out.println("NO {...}");
经处理后会变成
- if(a>b){
- System.out.println("NO {...}");
- }
即使你写出这样的语句:
- if()if()for(;;)if()a=0;
它也会帮你变得整整齐齐:
- if()
- {
- if()
- {
- for(;;)
- {
- if()
- {
- a=0;
- }
- }
- }
- }
(2)软件会自动规范统一注释,也会进行整齐排版。
比如
- /*abcd
- ef
- */
会变成
- /*
- abcd
- ef
- */
但 /**aaaaa*/ 却不会改变。
就先写这么多,其他的如果感兴趣可以使用然后去了解,我会将软件开源,将源代码贡献出来并附带详细注释(代码量不是很大,大概5000行,大三学生,代码没深度易理解,也可以作为新手学习材料),如果大家有兴趣的话也可以为软件添砖增瓦,将其功能做得更强大。最近要开始忙学校的一些事了,所以对于源代码整理可能还需要些时间。
如果你有一个风格写得很遭的代码文件test.java,想把它用ak风格重新排版,增加上头部注释,隔开数目运算符,每个方法区之间以空行隔开,并且输出字符格式指定为utf8,那么你只需要这么做:
jstyle -s=ak -co=utf8 --o=ah:po test.java,
片秒过后,整齐的代码就出来了。那么原先的代码还在吗?在,原始的代码会保存在.jo的文件中,也就是test.java.jo(不否认这点参考了Artistic Style的设计思想).不知道怎么使用的时候就找jstyle -help或者jstyle -h.
最后希望大家会喜欢这款软件,尤其是喜欢JAVA语言的朋友。
转载于:https://blog.51cto.com/jayson/985530