CodeGym /課程 /JAVA 25 SELF /跳脫字元

跳脫字元

JAVA 25 SELF
等級 9 , 課堂 1
開放

1. 常見的特殊字元與跳躍

在程式設計中,字串不僅由字母組成,也包含各種特殊字元:引號、換行、定位字元,有時甚至還有像 \n\t 這樣的記號。不過,如果你想在字串裡寫下 你好, "user"!,編譯器就會問:「字串裡的引號——這是錯誤嗎?」這時就需要跳脫機制。

在 Java 中,跳脫 是在字串內對某些字元「特別處理」的方式。為此會使用反斜線 \(backslash)。

經典的特殊字元:

序列 說明 示範
\n
換行 按下 Enter
\t
定位字元(Tab) Tab
\\
字面上的「反斜線」
\
\"
字串內的雙引號
"
\'
單引號(在字串中較少需要)
'
\r
歸位(Carriage Return,舊式換行,較少使用)
\0
NUL 字元 (不可見)
\b
退格(刪除前一個字元——在主控台不一定有效)

如何運作

我們來寫幾行帶有跳脫字元的字串,看看它們的效果。

System.out.println("你好,\"使用者\"!");
// 輸出:你好,"使用者"!

System.out.println("C:\\Program Files\\MyApp");
// 輸出:C:\Program Files\MyApp

System.out.println("第 1 行\n第 2 行");
// 輸出:
// 第 1 行
// 第 2 行

System.out.println("我\t喜歡\t定位字元!");
// 輸出:
// 我         喜歡    定位字元!

像這樣,靠著一個小小的反斜線(\),你就能把幾乎任何特殊字元「帶進」字串,而不會讓編譯器或同事驚慌。

2. 多行字串與換行

我們很常需要寫多行訊息或 ASCII 藝術。最直接的方式——是在一般字串中使用 \n

System.out.println("第一行\n第二行\n第三行");

不過這並不總是方便,因此 Java 出現了 文字區塊(Text Blocks)。它們以三個引號 """ 開始,能讓你在不需跳脫的情況下撰寫多行文字並保留格式——非常適合 JSON、SQL 與 HTML。


// 多行字面值(Text Block)
String json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["Java", "SQL", "Cloud"]
    }
    """;

System.out.println(json);
Java 的文字區塊 """

透過文字區塊,也能輕鬆建立包含引號的多行文字,而不必重複跳脫它們。

3. Unicode —— Java 如何儲存全世界的任何字元

在現代開發中,我們處理的不僅是拉丁字母,還有西里爾字母、漢字、數學符號,甚至 emoji。這一切都要歸功於字元編碼系統——Unicode

什麼是 Unicode?

Unicode 是一個國際標準,為每個字元指派唯一的編號(code point),不受語言與平台限制。因此你可以在 Java 同時使用西里爾文、英文、中文漢字,甚至各種罕見的特殊符號。

不同語言的字串範例:

System.out.println("Hello, 世界! 你好! مرحبا!");

字串中的 Unicode 字元

你可以直接輸入任何你的編碼所支援的字元,或使用 \uXXXX 形式的跳脫序列,其中 XXXX 是 4 位十六進位碼。

System.out.println("符號: \u263A"); // 會輸出 😊

對於碼位超過 65535 的字元(例如許多表情符號)會使用代理對(UTF-16):

// 字元 😊(碼位 1F60A)由兩個 char 表示
System.out.println("表情: \uD83D\uDE0A"); // 會輸出 😊

這能帶來什麼好處?

  • 你可以儲存並處理任何文字。
  • 不必擔心混用語言或使用非標準符號——Java 開箱即支援 Unicode。
  • 面向國際使用者與非常用字母的情境時格外重要。

4. 字串中的表情符號與特殊字元

現代的字串不僅是字母,還有 emoji!例如,你想傳給使用者一則帶著「笑臉」的訊息。

如何把表情符號放進字串?

直接把 emoji 放進字串:

System.out.println("你好! 😊");

使用 Unicode 碼位: 對多數表情符號,可以使用代理對序列。

System.out.println("這是小貓: \uD83D\uDC31"); // 🐱

Emoji 在字串中可能會占兩個字元(因為 UTF-16)。因此在某些操作(例如取得長度)時,可能會有意外:

String s = "😊";
System.out.println(s.length()); // 會輸出 2,而不是 1!

這是因為在 Java 中,一個 Unicode code point 會以兩個 char 編碼。要正確處理字元,請使用 code point 與相應的方法,而不是單純呼叫 length()

5. 陷阱與常見錯誤

錯誤 1:在字串內錯誤使用引號。 如果不跳脫內部引號,編譯器會「以為」字串已經結束。

System.out.println("他說: "你好!""); // 錯誤!

正確:

System.out.println("他說: \"你好!\"");

錯誤 2:路徑中只用單個反斜線。 在 Java 中,\ 用於特殊字元(\n\t\f 等)。因此字串 "C:\Temp\file.txt" 會被錯誤解讀。

System.out.println("C:\Temp\file.txt"); // 錯誤或非預期的結果

正確:

System.out.println("C:\\Temp\\file.txt"); // 使用雙反斜線

錯誤 3:忽略文字區塊。 自 Java 15 起,請使用 文字區塊——這能大幅簡化多行字串的處理。

String path = """
    C:\Temp\file.txt
    """;
System.out.println(path);

最重要的原則:務必跳脫特殊字元與引號。這能避免隱藏的 bug,並節省大量除錯時間。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION