天天看點

Java核心技術卷I基礎知識3.6.6 碼點與代碼單元

<b>3.6.6 碼點與代碼單元</b>

java字元串由char值序列組成。從3.3.3節“char類型”已經看到,char資料類型是一個采用utf-16編碼表示unicode碼點的代碼單元。大多數的常用unicode字元使用一個代碼單元就可以表示,而輔助字元需要一對代碼單元表示。

length方法将傳回采用utf-16編碼表示的給定字元串所需要的代碼單元數量。例如:

要想得到實際的長度,即碼點數量,可以調用:

調用s.charat(n)将傳回位置n的代碼單元,n介于0~s.length()-1之間。例如:

要想得到第i個碼點,應該使用下列語句

      注釋:類似于c和c++,java對字元串中的代碼單元和碼點從0開始計數。

為什麼會對代碼單元如此大驚小怪?請考慮下列語句:

使用utf-16編碼表示字元(u+1d546)需要兩個代碼單元。調用

傳回的不是一個空格,而是的第二個代碼單元。為了避免這個問題,不要使用char類型。這太底層了。

如果想要周遊一個字元串,并且依次檢視每一個碼點,可以使用下列語句:

可以使用下列語句實作回退操作:

顯然,這很麻煩。更容易的辦法是使用codepoints方法,它會生成一個int值的“流”,每個int值對應一個碼點。(流将在卷Ⅱ的第2章中讨論)。可以将它轉換為一個數組(見3.10節),再完成周遊。

反之,要把一個碼點數組轉換為一個字元串,可以使用構造函數(我們将在第4章詳細讨論構造函數和new操作符)。