日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用Java截取字符串的方法

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

成都創(chuàng)新互聯(lián)公司于2013年成立,先為薊州等服務(wù)建站,薊州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為薊州企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

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

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

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

由于上面生成的字節(jié)數(shù)組中前兩個(gè)字節(jié)是標(biāo)志位,bytes[0] = -2,bytes[1] = -1,因此,要從第三個(gè)字節(jié)開始掃描,對于一個(gè)英文或數(shù)字字符,UCS2編碼的第二個(gè)字節(jié)是相應(yīng)的ASCII,第一個(gè)字節(jié)是0,如a的UCS2編碼是0  97,而漢字兩個(gè)字節(jié)都不為0,因此,可以利于UCS2編碼的這個(gè)規(guī)則來計(jì)算實(shí)際的字節(jié)數(shù),該方法的實(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個(gè)字節(jié)開始  
  7.     for (; i < bytes.length && n < length; i++)  
  8.     {  
  9.         // 奇數(shù)位置,如3、5、7等,為UCS2編碼中兩個(gè)字節(jié)的第二個(gè)字節(jié)  
  10.         if (i % 2 == 1)  
  11.         {  
  12.             n++; // 在UCS2第二個(gè)字節(jié)時(shí)n加1  
  13.         }  
  14.         else 
  15.         {  
  16.             // 當(dāng)UCS2編碼的第一個(gè)字節(jié)不等于0時(shí),該UCS2字符為漢字,一個(gè)漢字算兩個(gè)字節(jié)  
  17.             if (bytes[i] != 0)  
  18.             {  
  19.                 n++;  
  20.             }  
  21.         }  
  22.     }  
  23.     // 如果i為奇數(shù)時(shí),處理成偶數(shù)  
  24.     if (i % 2 == 1)  
  25.  
  26.     {  
  27.         // 該UCS2字符是漢字時(shí),去掉這個(gè)截一半的漢字  
  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等"。

【編輯推薦】

  1. 實(shí)現(xiàn)Java中對象比較的兩個(gè)方法
  2. 初學(xué)Java多線程:使用Synchronized塊同步方法
  3. 初學(xué)Java多線程:使用Synchronized關(guān)鍵字同步類方法
  4. 初學(xué)Java多線程:從線程返回?cái)?shù)據(jù)的兩種方法
  5. 初學(xué)Java多線程:向線程傳遞數(shù)據(jù)的三種方法

網(wǎng)頁標(biāo)題:使用Java截取字符串的方法
網(wǎng)站地址:http://www.5511xx.com/article/djpdidc.html