金陵之風(fēng)塵

          灰塵,也有生活;
          它們?cè)陲L(fēng)中飄著,在煙中戀愛(ài),在暖氣上撫摸;
          它們?cè)诤脦讉€(gè)地方找我……
          posts - 5, comments - 13, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          按字節(jié)截取含雙字節(jié)的字符串!

          Posted on 2006-10-13 09:57 風(fēng)塵仆仆 閱讀(2341) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): Java
          String.substring(0, n)函數(shù)返回該字符串前n個(gè)字符的新字符串,但如果只想返回前n個(gè)字節(jié),而字符串中又含有中文等雙字節(jié)字符怎么辦呢,我寫(xiě)了個(gè)函數(shù),不過(guò)只假定參數(shù)字符串中只含有單字節(jié)和雙字節(jié)字符,不包含4字節(jié)的Unicode32。

          例如:"我ABC是中國(guó)人DEF",截取5個(gè)字節(jié)應(yīng)返回"我ABC",截取6個(gè)字節(jié)應(yīng)返回"我ABC",截取7個(gè)字節(jié)應(yīng)返回"我ABC是"。

          函數(shù)中主要是使用String.getBytes()判斷一個(gè)字符包含單節(jié)還是雙字節(jié),因?yàn)橐啻蝿?chuàng)建String字符,速度比較慢,誰(shuí)有更好的方法也請(qǐng)給出建議。

          ?1?static?final?String?subStringbyBytes(final?String?str,?final?int?bytes)?{
          ?2?????int?bytesCounter?=?0;
          ?3?????String?resStr?=?null;
          ?4?
          ?5?????//?首字符為雙字節(jié),?而要求輸出一個(gè)字節(jié)
          ?6?????if(bytes?==?1)?{
          ?7???????String?aChar?=?str.substring(0,?1);
          ?8???????byte[]?bytesInChar?=?aChar.getBytes();
          ?9?
          10???????if(bytesInChar.length?==?2)
          11?????????return?"";
          12?????}
          13?
          14?????for(int?i?=?0;?i?<?str.length();?i++)?{
          15???????String?aChar?=?str.substring(i,?i?+?1);
          16???????byte[]?bytesInChar?=?aChar.getBytes();
          17?
          18???????if(bytesInChar.length?==?1)?{
          19?????????//?single?byte?character
          20?????????++bytesCounter;
          21?
          22?????????if(bytesCounter?==?bytes)?{
          23???????????resStr?=?str.substring(0,?i?+?1);
          24???????????break;
          25?????????}
          26???????}
          27???????else?if(bytesInChar.length?==?2){
          28?????????//?double?bytes?character
          29?????????bytesCounter?+=?2;
          30?
          31?????????if(bytesCounter?>?bytes)?{
          32???????????resStr?=?str.substring(0,?i);
          33???????????break;
          34?????????}
          35?
          36?????????if(bytesCounter?==?bytes)?{
          37???????????resStr?=?str.substring(0,?i?+?1);
          38???????????break;
          39?????????}
          40???????}
          41?????}
          42?
          43?????return?resStr;
          44???}

          評(píng)論

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2006-10-13 13:55 by 1
          現(xiàn)在去www.mylinux.com.cn網(wǎng)站趣味問(wèn)答,做題目,獎(jiǎng)積分.積分還能直接購(gòu)物呢.提供給你一個(gè)學(xué)習(xí)的機(jī)會(huì),對(duì)軟件編程人員有很大的幫助哦

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2006-10-13 21:12 by Web 2.0 技術(shù)資源
          效率太低了...........

          給個(gè)簡(jiǎn)單的處理方式吧~~~

          public static String getShorterString( String input , int bytes )
          {
          try
          {
          byte[] array = input.getBytes("GBK");
          if( bytes >= array.length ) return input;
          String result = new String(array , 0 , bytes ,"GBK");
          return result.length() > 0 ? result : new String(array , 0 , bytes - 1 ,"GBK");
          }
          catch (UnsupportedEncodingException e)
          {
          return input;
          }
          }

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2006-10-16 00:40 by yyuan
          是的,我也感覺(jué)我的代碼效率比較低,謝謝!

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2006-10-18 15:43 by 123bingbing
          增開(kāi)7群,號(hào)碼 30440732
          8群 30756649
          9群 30178567
          10群 28694497

          我們的qq群:15096318 學(xué)習(xí)程序的都可以來(lái)

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2008-06-20 09:33 by rakor
          @Web 2.0 技術(shù)資源
          兄弟,你寫(xiě)的是JAVA代碼吧~~~~~~~

          # re: 按字節(jié)截取含雙字節(jié)的字符串!  回復(fù)  更多評(píng)論   

          2008-06-20 09:35 by rakor
          不好意思,走錯(cuò)地方了,見(jiàn)諒

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 崇文区| 汉中市| 苍梧县| 瓦房店市| 安乡县| 称多县| 文成县| 勐海县| 扶余县| 密山市| 安新县| 娱乐| 得荣县| 胶南市| 桐庐县| 综艺| 扎囊县| 隆回县| 井冈山市| 屏东县| 会同县| 无极县| 柳江县| 呼和浩特市| 滦南县| 萍乡市| 华宁县| 河间市| 西和县| 曲沃县| 花垣县| 麻江县| 米泉市| 颍上县| 伽师县| 博湖县| 湟中县| 正定县| 彰化市| 大同市| 永清县|