早上看到了一個“二進制與任意字符互轉(zhuǎn)小程序”,覺得有幾點不足,因此動手改進一下,不足之處歡迎批評指正。也請原作者不要介懷。

          public class StringBinaryConvertor {
              //字符串轉(zhuǎn)化為2進制
              public static String stringToBinary(String str){
                  StringBuffer sb = new StringBuffer("");
                  char[] charArray = str.toCharArray();
                  for(char c : charArray) {
                      sb.append(Integer.toBinaryString((int)c)).append(" ");
                  }
                  return sb.toString();
              }

              //2進制轉(zhuǎn)化為字符串
              public static String binaryToString(String binStr) throws NumberFormatException{
                  StringBuffer sb = new StringBuffer("");
                  String[] strArray = binStr.split(" ");
                  for(String s : strArray){
                      sb.append((char)(Integer.parseInt(s, 2)));
                  }
                  return sb.toString();
              }
          }


          class Test {
              public static void main(String[] args) {
                  String str = StringBinaryConvertor.stringToBinary("善查類庫,簡化代碼!Right!");
                  System.out.println(str);
                  System.out.println();
                  
                  try{
                      System.out.println(StringBinaryConvertor.binaryToString(str));
                      System.out.println(StringBinaryConvertor.binaryToString("010021111"));
                  } catch (NumberFormatException nfe){
                      System.out.println("Illegal binary!");
                  }
              }
          }

          我主要考慮了幾點:
          1、作為工具類,靜態(tài)方法比較好一點,Java類庫中util中就有很多是靜態(tài)的工具。
          2、原程序沒有充分利用到Java類庫,有冗余。自己編寫的代碼越多,bug的幾率越大!
          3、異常處理是健壯的代碼不可少的。輸入一堆0、1很容易出錯,而且萬一分隔符分得不恰當(dāng)呢?
          4、在大量字符串連接時,String創(chuàng)建了大量的無用的中間String,其開銷是指數(shù)增長d俄。而用StringBuffer,其開銷是線性增長的。
          5、用for/each循環(huán)代替for。這個代碼只是要遍歷,和下標(biāo)無關(guān),用for/each更好一點。

          備注:StringTokenizer類可以實現(xiàn)字符串分析,但是StringTokenizer是出于兼容性的原因而被保留的遺留類。建議所有尋求此功能的人使用 String 的 split方法或 java.util.regex 包。
          這是翔南提醒我的,原來還真不知道。正是應(yīng)了那句話:獨學(xué)而無友,則孤陋而寡聞。

          Feedback

          # re: 對“二進制與任意字符互轉(zhuǎn)小程序”的一點改進  回復(fù)  更多評論   

          2007-10-20 13:58 by 翔南
          不介懷不介懷 哈哈
          說的挺對的

          其實我真的不是很知道什么時候該用static,什么時候不用..望指點!

          Integer的public static int parseInt(String s,
          int radix)
          throws NumberFormatException
          方法至今才知道,看來我對java類庫了解的太少了..
          異常處理再加以配合,真的很棒!

          還有StringBuffer的問題,當(dāng)初也沒多想,聽你這么一說,才意識到效率的問題..
          挺可怕的..

          for each當(dāng)初想用來著,我也挺愛用的,但有一次在我們學(xué)校機房用(機房jdk貌似版本很低),就沒成功,我以后就老想著萬一別人的jdk版本沒到1.5那不是就不能編譯通過了..呵呵

          總結(jié)一下,以后編程不能只求實現(xiàn),一定要設(shè)計好,要多考慮考慮算法和充分利用java類庫!

          # re: 對“二進制與任意字符互轉(zhuǎn)小程序”的一點改進  回復(fù)  更多評論   

          2007-10-20 15:30 by Raylong
          @翔南
          剛才又改進了一下,用StringTokenizer類功能更強大。

          # re: 對“二進制與任意字符互轉(zhuǎn)小程序”的一點改進  回復(fù)  更多評論   

          2007-10-20 22:04 by 翔南
          其實用String的split方法也可以達(dá)到這種效果,反正split(String regex)的參數(shù)是個正則表達(dá)式
          如下就可以實現(xiàn)用空格、,和換行符作為單詞的分割標(biāo)志
          binStr.split(" |,|\\n");

          況且偶在StringTokenizer的API中看到這樣一句話
          "StringTokenizer 是出于兼容性的原因而被保留的遺留類(雖然在新代碼中并不鼓勵使用它)。建議所有尋求此功能的人使用 String 的 split 方法或 java.util.regex 包"

          所以偶覺著這塊還是用split的好吧~~

          # re: 對“二進制與任意字符互轉(zhuǎn)小程序”的一點改進  回復(fù)  更多評論   

          2007-10-20 22:11 by Raylong
          @翔南
          又是正則表達(dá)式,看來我真的要學(xué)了,刻不容緩 呵呵!
          那你說的我沒注意到,學(xué)習(xí)一下!
          主站蜘蛛池模板: 奎屯市| 全南县| 二手房| 龙泉市| 德州市| 浙江省| 临江市| 淳化县| 蛟河市| 湘乡市| 大悟县| 兰州市| 张家川| 永吉县| 万全县| 广宗县| 凤阳县| 原阳县| 绍兴市| 神木县| 巴东县| 淮北市| 阜阳市| 琼中| 松桃| 祁阳县| 五原县| 长沙市| 科技| 平昌县| 阳高县| 株洲市| 军事| 湖州市| 芦山县| 汉阴县| 西乌珠穆沁旗| 威海市| 陆川县| 英超| 关岭|