亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2939 | 回復: 0
打印 上一主題 下一主題

用Java實現按字節(jié)長度截取字符串的方法 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-01-13 20:57 |只看該作者 |倒序瀏覽
Web應用程序在瀏覽器中顯示字符串時,由于顯示長度的限制,常常需要將字符串截取后再進行顯示。但目前很多流行的語言,如C#、Java內部采用的都是 Unicode 16(UCS2)編碼,在這種編碼中所有的字符都是兩個字符,因此,如果要截取的字符串是中、英文、數字混合的,就會產生問題,如下面的字符串:
String s = "a加b等于c,如果a等1、b等于2,那么c等3";
  上面的字符串既有漢字,又有英文字符和數字。如果要截取前6個字節(jié)的字符,應該是”a加b等",但如果用substring方法截取前6個字符就成了"a 加b等于c"。產生這個問題的原因是將substring方法將雙字節(jié)的漢字當成一個字節(jié)的字符(UCS2字符)處理了。要解決這個問題的方法是首先得到該字符串的UCS2編碼的字節(jié)數組,如下面的代碼如下:
byte[] bytes = s.getBytes("Unicode");
    由于上面生成的字節(jié)數組中前兩個字節(jié)是標志位,bytes[0] = -2,bytes[1] = -1,因此,要從第三個字節(jié)開始掃描,對于一個英文或數字字符,UCS2編碼的第二個字節(jié)是相應的ASCII,第一個字節(jié)是0,如a的UCS2編碼是0  97,而漢字兩個字節(jié)都不為0,因此,可以利于UCS2編碼的這個規(guī)則來計算實際的字節(jié)數,該方法的實現代碼如下:
    public static String bSubstring(String s, int length) throws Exception
    {
        byte[] bytes = s.getBytes("Unicode");
        int n = 0; // 表示當前的字節(jié)數
        int i = 2; // 要截取的字節(jié)數,從第3個字節(jié)開始
        for (; i

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/110188/showart_2148027.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP