在 Java 中,字符是使用 Unicode 編碼的。Unicode 是一個字符集,它為每個字符定義了一個唯一的數字,稱為碼點。Java 中的 char 類型可以存儲一個碼點。
char ch = 'A'; // ch 存儲 A 的碼點 65
當 Java 程序使用字符串時,它實際上操作的是一個由 char 數組表示的序列。一個字符串的長度是它的代碼單元數量,即它的 char 數組的長度。
String str = "hello"; // str 包含 5 個代碼單元
Java 中的字符串還支持以下幾個編碼格式:
- UTF-8
- UTF-16
- UTF-32
- ISO-8859-1
字符串的長度可能與代碼點數量不同,這是因為某些字符可能需要多個代碼單元表示。例如,中文字符需要使用兩個代碼單元表示,因為它的碼點超過了 char 類型的范圍。這種情況下,對于字符串長度的計算,Java 應使用代碼點而非代碼單元。
String chinese = "你好"; // chinese 包含 2 個代碼點,但 4 個代碼單元 System.out.println(chinese.length()); // 輸出 2
在 Java 中,可以通過使用 length() 方法來獲取字符串的代碼單元數量以及代碼點數量。使用代碼點的方法是調用 codePointCount() 方法,該方法接受起始索引和結束索引作為參數。
String greetings = "Hello, world! 你好,世界!"; System.out.println(greetings.length()); // 輸出 21,表示代碼單元數量 System.out.println(greetings.codePointCount(0, greetings.length())); // 輸出 17,表示代碼點數量