国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
使用Java 按照字節(jié)長度截取字符串的方法
    本文講述如何用Java實現(xiàn)按字節(jié)長度截取字符串。如果要截取的字符串是中、英文、數(shù)字混合的,往往產(chǎn)生問題。解決這個問題的方法是首先得到該字符串的UCS2編碼的字節(jié)數(shù)組。

    Web應(yīng)用程序在瀏覽器中顯示字符串時,由于顯示長度的限制,常常需要將字符串截取后再進(jìn)行顯示。但目前很多流行的語言,如C#、Java內(nèi)部采用的都是 Unicode 16(UCS2)編碼,在這種編碼中所有的字符都是兩個字符,因此,如果要截取的字符串是中、英文、數(shù)字混合的,就會產(chǎn)生問題,如下面的字符串:

    1. String s = "a加b等于c,如果a等1、b等于2,那么c等3";  

    上面的字符串既有漢字,又有英文字符和數(shù)字。如果要截取前6個字節(jié)的字符,應(yīng)該是”a加b等",但如果用substring方法截取前6個字符就成了"a 加b等于c"。產(chǎn)生這個問題的原因是將substring方法將雙字節(jié)的漢字當(dāng)成一個字節(jié)的字符(UCS2字符)處理了。要解決這個問題的方法是首先得到該字符串的UCS2編碼的字節(jié)數(shù)組,如下面的代碼如下:

    1. byte[] bytes = s.getBytes("Unicode"); 

    由于上面生成的字節(jié)數(shù)組中前兩個字節(jié)是標(biāo)志位,bytes[0] = -2,bytes[1] = -1,因此,要從第三個字節(jié)開始掃描,對于一個英文或數(shù)字字符,UCS2編碼的第二個字節(jié)是相應(yīng)的ASCII,第一個字節(jié)是0,如a的UCS2編碼是0  97,而漢字兩個字節(jié)都不為0,因此,可以利于UCS2編碼的這個規(guī)則來計算實際的字節(jié)數(shù),該方法的實現(xiàn)代碼如下:

    1. public static String bSubstring(String s, int length) throws Exception  
    2. {  
    3.  
    4.     byte[] bytes = s.getBytes("Unicode");  
    5.     int n = 0// 表示當(dāng)前的字節(jié)數(shù)  
    6.     int i = 2// 要截取的字節(jié)數(shù),從第3個字節(jié)開始  
    7.     for (; i < bytes.length && n < length; i++)  
    8.     {  
    9.         // 奇數(shù)位置,如3、5、7等,為UCS2編碼中兩個字節(jié)的第二個字節(jié)  
    10.         if (i % 2 == 1)  
    11.         {  
    12.             n++; // 在UCS2第二個字節(jié)時n加1  
    13.         }  
    14.         else 
    15.         {  
    16.             // 當(dāng)UCS2編碼的第一個字節(jié)不等于0時,該UCS2字符為漢字,一個漢字算兩個字節(jié)  
    17.             if (bytes[i] != 0)  
    18.             {  
    19.                 n++;  
    20.             }  
    21.         }  
    22.     }  
    23.     // 如果i為奇數(shù)時,處理成偶數(shù)  
    24.     if (i % 2 == 1)  
    25.  
    26.     {  
    27.         // 該UCS2字符是漢字時,去掉這個截一半的漢字  
    28.         if (bytes[i - 1] != 0)  
    29.             i = i - 1;  
    30.         // 該UCS2字符是字母或數(shù)字,則保留該字符  
    31.         else 
    32.             i = i + 1;  
    33.     }  
    34.  
    35.     return new String(bytes, 0, i, "Unicode");  
    36. }  
      • 下面代碼使用了bSubstring方法:

        1. String s = "a加b等于c,如果a等1、b等于2,那么c等3";  
        2. System.out.println(bSubstring(s, 6)); 

        上面的代碼截取的字符串是"a加b等"。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用Java實現(xiàn)按字節(jié)長度截取字符串的方法
《源碼探秘 CPython》20. Python是怎么存儲字符串的?
字符集編碼發(fā)展簡史
java 字符編碼處理
2005年7月3日的資料相關(guān)
java 中String編碼和byte 解碼 總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服