java源代碼排版與轉換軟件 Jstyle

    爲大家推薦一款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')
       
  1. public class test  
  2.     public void test()     
  3.     {  
  4.          int a=0
  5.          if(a>0
  6.          { 
  7.           a=1
  8.          } 
  9.      } 
 
   (2) java:(或者S1,兩次縮進爲一個'\t')
 
  1. public class test { 
  2.     public void test(){  
  3.          int a=0
  4.          if(a>0){ 
  5.           a=1
  6.          } 
  7.      } 
 
   (3) linux:(或者S4,一次縮進爲一個'\')
     
  1. public class test  
  2.         public void test()     
  3.         {  
  4.                  int a=0
  5.                  if(a>0
  6.                  { 
  7.                       a=1
  8.                  } 
  9.          } 
 
    (4) gnu:(或者S2,兩次縮進爲一個'\t')
 
  1. public class test  
  2.     public void test()     
  3.     {  
  4.          int a=0
  5.          if(a>0
  6.              { 
  7.               a=1
  8.              } 
  9.       } 
 
    (5) ak:(或者S3,一次縮進爲一個'\t')
       
  1. public  
  2. abstract class test  
  3.   
  4. public 
  5. static void test() 
  6. {  
  7.         int a=0
  8.         if(a>0
  9.         { 
  10.             a=1
  11.         } 
  12. public 
  13. static int test1() 
  14. {  
  15.         int a=0
  16.         if(a>0
  17.         { 
  18.             a=1
  19.         } 
  20.         return 1
 
    (6) mini:(或者S6,兩次縮進爲一個'\t')
  1. public class test{ 
  2.     public void test(){  
  3.         int a=0
  4.         if(a>0
  5.         { 
  6.          a=1
  7.         } 
  8.     } 
 
 
  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:給源文件增加頭部註釋說明,風格如下:
 
  1. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  
  2.   *  xxxx.java 
  3.   *  @ author: 
  4.   *  @ version: 
  5.   * 
  6.   *  Directions: 
  7.   * 
  8.   * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  
  9.   */ 
 
 
  (2) am:爲每個方法區域增加註釋,風格如下:
 
  1. /* 
  2.  * 
  3.  */ 
  4.  public void run(){} 
 
   
  (3) dc:刪除文件中所有註釋。
 
  (4) ra:修整數組,如下:
  
   
  1. int[]={1,2,3,4        
    變爲
   
  1. int[]={1, 
  2.        2, 
  3.        3, 
  4.        4} 
 
 
 
  1. int[][]={(1,2),(3,4),(5,6)} 
  變爲  
 
  1. int[][]={(1,2), 
  2.          (3,4), 
  3.          (5,6)} 
 
 
   如果不指定默認爲9個元素後自動換行。
 
  (5) ro:修整控制塊。
   
   
  1. if(a>0||a>0&&a>0||a>0){ 
  2.     ..... 
   變爲  
  1. if(a>0|| 
  2.    a>0|| 
  3.    a>0
  4.     ....  
 
   如果不指定默認3個關係運算後換行。
 
  (6) rs:修整switch語句。
 
 
  1. switch(a){          
  2. case 1:              
  3.     a;               
  4. case 2:              
  5.     b;               
    變爲
    
  1. switch(a){          
  2.     case 1:              
  3.         a;               
  4.     case 2:              
  5.         b;               
  6.  
  (7) po:隔開雙目運算符與兩邊元素。
 
   
  1. int a,b;    
  2. a=a+b; 
  變爲
  
  1. int a,b; 
  2. a = a + b; 
   
   默認不隔開。
 
  (8) pb:隔開{與前面的元素。
   
 
  1. public void run(){ 
   變成
 
  1. public void run() { 
 
   默認不隔開。 
  
  (9) ps:隔開if,switch,for,while語句中"("與前面的元素。
 
  1. if(a>b){  
  2. ....   
   變爲
  
  1. if (a>b){    
  2.     .... 
  3.  
  6.其他隱含功能。
  (1)軟件會對程序中所以流程跳轉語句(if,else那些的)區域的"{}"自動檢測,當區域只含有一條子語 句而沒有添加"{}"時,軟件會自動進行添加,這也是爲了培養良好的編程習慣。比如
 
 
  1. if(a>b) 
  2.     System.out.println("NO {...}"); 
 
 
 經處理後會變成
 
  1. if(a>b){ 
  2.      System.out.println("NO {...}"); 
 
 
  即使你寫出這樣的語句:
  1. if()if()for(;;)if()a=0
  它也會幫你變得整整齊齊:
 
 
  1. if()  
  2. {     
  3.     if()  
  4.     {         
  5.         for(;;)  
  6.         {     
  7.             if()  
  8.             {  
  9.                 a=0;  
  10.             }  
  11.         }  
  12.     }     
  13. }   
 
  (2)軟件會自動規範統一註釋,也會進行整齊排版。
 
   比如          
  1. /*abcd 
  2.         ef 
  3.          */ 
 
   會變成
 
       
  1. /* 
  2. abcd 
  3. ef 
  4. */ 
 
  但  /**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語言的朋友。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章