2009/12/18

Java 如何正確地取得中文字的長度與擷取字元

在 Java 中遇到中文字,

若用 length() 取資料長度, 中文字會當作 1 碼,

而用 substring 擷取子字串, 中文字也會當作 1 碼,

要如何正確取得中文字的長度與擷取子字串,

參考以下範例 :
 程式碼
public class aaa
{
public static void main( String args[] )
{
String vData = "歡迎光臨, Hello World"; // 資料
byte[] vResult = new byte[100];
int getSubstringLen = 8; // 擷取長度

// 長度
System.out.println( "length : " + vData.length() );
System.out.println( "Actual length : " + vData.getBytes().length );

// 擷取前幾碼
System.out.println( "前 " + getSubstringLen + " 碼 : "
+ vData.substring( 0, getSubstringLen )
);

System.arraycopy( vData.getBytes(), 0, vResult, 0, getSubstringLen );
System.out.println( "Actual 前 " + getSubstringLen + " 碼 : "
+ new String(vResult)
);
}
}

//執行結果
length : 17
Actual length : 21
前 8 碼 : 歡迎光臨, He
Actual 前 8 碼 : 歡迎光臨