自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Java截取字符串的方法

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

Web應(yīng)用程序在瀏覽器中顯示字符串時,由于顯示長度的限制,常常需要將字符串截取后再進行顯示。但目前很多流行的語言,如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é)的漢字當成一個字節(jié)的字符(UCS2字符)處理了。要解決這個問題的方法是首先得到該字符串的UCS2編碼的字節(jié)數(shù)組,如下面的代碼如下:

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

由于上面生成的字節(jié)數(shù)組中前兩個字節(jié)是標志位,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// 表示當前的字節(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.             // 當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等"。

【編輯推薦】

  1. 實現(xiàn)Java中對象比較的兩個方法
  2. 初學(xué)Java多線程:使用Synchronized塊同步方法
  3. 初學(xué)Java多線程:使用Synchronized關(guān)鍵字同步類方法
  4. 初學(xué)Java多線程:從線程返回數(shù)據(jù)的兩種方法
  5. 初學(xué)Java多線程:向線程傳遞數(shù)據(jù)的三種方法
責任編輯:yangsai 來源: 真的有外星人嗎
相關(guān)推薦

2010-11-26 11:34:32

MySQL截取字符串函

2011-12-20 10:28:01

Java字符串

2022-07-18 08:18:11

字符JavaJDK

2010-04-27 12:26:21

Unix字符串

2009-09-01 17:50:23

C#截取字符串

2009-09-01 17:58:55

C#截取字符串

2009-09-01 17:41:53

C#截取字符串函數(shù)

2022-03-16 22:21:53

substringsubstrslice

2021-03-08 08:23:24

Java字符串截取

2009-11-18 18:02:19

PHP字符串截取

2023-10-08 08:37:28

SQL字符串數(shù)據(jù)

2009-08-07 15:49:46

使用C#字符串

2021-01-09 23:11:33

SQL數(shù)據(jù)庫字母

2010-09-13 15:06:40

sql server字

2021-05-18 09:08:18

字符串子串對象

2009-11-30 10:40:46

PHP截取utf-8字

2020-09-03 10:13:49

JavaScript字符串pad

2009-11-25 13:31:34

PHP常用語法

2010-07-13 09:20:38

SQL Server

2012-02-06 15:22:16

Java
點贊
收藏

51CTO技術(shù)棧公眾號