av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

使用Java截取字符串的方法

Web應(yīng)用程序在瀏覽器中顯示字符串時(shí),由于顯示長(zhǎng)度的限制,常常需要將字符串截取后再進(jìn)行顯示。但目前很多流行的語言,如C#、Java內(nèi)部采用的都是 Unicode 16(UCS2)編碼,在這種編碼中所有的字符都是兩個(gè)字符,因此,如果要截取的字符串是中、英文、數(shù)字混合的,就會(huì)產(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é)開始掃描,對(duì)于一個(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中對(duì)象比較的兩個(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)站名稱:使用Java截取字符串的方法
分享地址:http://uogjgqi.cn/article/djpdidc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流