Java String codePoint相關api


codePoint

  • 代碼點&代碼單元,是從Unicode標准而來的術語,Unicode標准的核心是一個編碼字符集
  • 在java中, 一個字符, 僅僅代表一個代碼點(codePoint),
    但卻有可能代表多個代碼單元(在java中就是兩個字節, 一個char),比如表情符😝,
    只代表一個代碼點, 卻占着兩個char

java api

  • 首先看一下表情符的length()長度
int length = "😁".length();
System.out.println("length " + length);//2
  • int codePointAt(int index): 返回char數組的給定索引上的代碼點
int at1 = "😁".codePointAt(0);
System.out.println("at1 " + at1);//128513
int at2 = "😁".codePointAt(1);
System.out.println("at2 " + at2);//56833
  • int codePointBefore(int index): 這里有疑惑, 按理說應該返的代碼點值跟上面方法一樣才對
int before1 = "😁".codePointBefore(1);
System.out.println("before1 " + before1);//55357
int before2 = "😁".codePointBefore(2);
System.out.println("before2 " + before2);//128513
  • int codePointCount(int beginIndex, int endIndex): 返回某個索引區間的代碼點數量,
    我們重點用這個
int count = "😁".codePointCount(0, "😁".length()-1);
System.out.println("count " + count);//1
  • IntStream codePoints(): 返回所有代碼點值的Stream
"😁".codePoints().boxed().forEach(
        integer -> System.out.println(integer));
  • int offsetByCodePoints(int index, int codePointOffset): 頭疼, 后邊再分析
int offset = "😁😁".offsetByCodePoints(1, 2);
System.out.println("offset " + offset);//4

參考資料

總結的時候發現還是有些疑問的, 煩煩煩, 待續吧
java的字符編碼集
What exactly does String.codePointAt do?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM