HOWTO · Java
在 Java 中表示空字元
本文介紹如何在 Java 中處理空字元。
本頁內容
Java 沒有「空的 primitive char」:char 存放一個 UTF-16 code unit。字面值 '' 因為沒有包含任何字元而無效。可以建立空的 char[],但那是零元素的陣列,不是 char 值。若要表示沒有文字,請使用空的 String;若需要字元值,則選擇實際字元,例如空格或 U+0000。
為什麼 '' 無效,而空格不同
char 字面值使用單引號,且必須包含一個字元。運算式 char ch = ''; 無法編譯。相較之下,' ' 是有效的 char,內容是空格。以下小程式會在方括號中顯示空格,並印出它的數值:
public class CharExample {
public static void main(String[] args) {
char space = ' ';
System.out.println("[" + space + "]");
System.out.println((int) space);
}
}
[ ]
32
方括號能讓空格與周圍文字區分開來,整數則顯示它的字元值。空格在比較和字串操作中仍然存在,因此只有在資料確實需要空白字元時才使用它。
沒有字元時使用空的 String
資料表示沒有文字時,可以使用 String value = "";。空的 String 長度為零,適合文字欄位、串接,以及要求字串的 API。它不是 char,因此 Java 不允許將 "" 指派給 primitive char 變數。空的 char[] 也可以使用,但它表示沒有元素的序列,而不是一個不存在的字元。
使用 \0 或 \u0000 表示 null 字元
Java 以 \0 或 \u0000 表示 U+0000;兩者代表相同的實際 char 值。U+0000 有時稱為 null 字元,但它不是空字元,也通常不會終止 Java 的 String。印出它時看起來可能是空白;若要確認其內容,可以檢查數值。它仍占用一個 code unit,並計入 Java 字串的 length()。
public class NullCharacterExample {
public static void main(String[] args) {
char shortEscape = '\0';
char unicodeEscape = '\u0000';
String value = "A" + shortEscape + "B";
System.out.println(shortEscape == unicodeEscape);
System.out.println((int) shortEscape);
System.out.println(value.length());
}
}
true
0
3
程式碼會比較這兩種寫法、將 U+0000 轉型為整數,並測量結果字串的長度。這樣就能檢查該值,不必依賴終端機如何呈現它。字串長度是三,因為其中包含 A、U+0000 和 B。
使用 Character.MIN_VALUE 或以 null 表示 Character 缺值
以下可執行範例會包裝一個字母,並印出其值及是否存在的檢查結果:
public class CharacterExample {
public static void main(String[] args) {
Character value = Character.valueOf('J');
System.out.println(value);
System.out.println(value == null);
}
}
J
false
Character.MIN_VALUE 是取得 U+0000 的具名方式;它不是另一種空值。只有在資料格式需要這個特定字元時才使用它。Character 包裝類別則可以存放 null,表示值不存在。這代表參照缺失,不是 char;在拆箱或呼叫其方法之前,程式碼必須先檢查它。
Java 會將 char 型別的實例欄位初始化為 U+0000。區域 char 變數沒有自動預設值,讀取前必須先指派值。沒有文字時選用 String;字元可有可無時,選用值為 null 的 Character;只有在 U+0000 本身有意義時才使用 \0。