我的Java日記–Char

來源:互聯網
上載者:User
  • Java語言中的每一個 char 類型變數均為16-bit,對應於UTF-16編碼中的一個 code unit(簡稱為CU)——即Java的 Char 類型變數完全遵循UTF-16編碼規範,編碼規範的詳細解讀見收藏夾中的《徹底搞懂字元編碼》一文。
            因為1個CU可能對應一個Unicode表中的一個code point(簡稱CP,一個cp對應於一個真正的unicode字元),也可能僅僅只是表示一個CP的兩個CU中的一個,所以Java中的一個 Char 類型變數並不一定就是代表一個字元。
            在Java中表示一個char常量的時候,可以使用\u逸出字元來表示一個CU——這裡需要注意的是,使用\u來表示一個char常量的時候,必須使用四位的十六進位數。例如 '\u0012',這樣才符合一個char類型變數必須為16-bit的要求。如果寫成 '\u12',Java編譯器將報錯。而對於Unicode表中的supplement characters(即CP值大於0xFFFF),例如 U+12345,我們是不能直接用 '\u12345' 這樣的形式來表示的,而必須遵循UTF-16編碼規範,寫成
    '\uD808\uDF45'
            String對象的length()方法返回的是CU的個數,而codePointCount()方法返回的才是CP的格式,二者不一定相等。類似的charAt()方法中的index參數也是針對CU而言的,而codePoint()方法的index參數是針對CP而言的,後者index需要首先通過String對象的offsetByCodePoint()方法才能擷取。offsetByCodePoints(int index, int codePointOffset) 兩個參數的含義個人理解為:以第index個CU為起點的第
    codePointOffset 個CP的第一個CU在String對象中的index
    。例如:String sentence = "\uD835\uDD6B\uD836\uDD6Cqq"; 

    • sentence.offsetByCodePoints(1, 0) 是指以第1個CU(\uDD6B)為起點的第0個CP,因為\uDD6B本身不是以D8開頭的,所以\uDD6B自身就被當做一個獨立的CP,因此傳回值也就是1了;
    • sentence.offsetByCodePoints(1, 1) 是指以第1個CU(\uDD6B)為起點的第1個CP,即 '\uD836\uDD6C' 這一個code point,因為這個CP是由兩個CU構成的,所以傳回值就是 \uD836 這個CU的index,即2
    • sentence.offsetByCodePoints(2, 0)是指以第2個CU(\uD836)為起點的第0個CP,因為 \uD836 本身就是以D8開頭的,所以對應的CP仍然是 '\uD836\uDD6C' 這一個code point,故而其傳回值與 sentence.offsetByCodePoints(1, 1) 是一樣的2
    • sentence.offsetByCodePoints(1, 2)是指以第1個CU(\uDD6B)為起點的第2個CP,對應的是'q'這個code point了,這個CP本身僅僅對應一個CU,所以傳回值就是4了
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.