作為 Codegym 大學課程一部分的導師授課片段。報名參加完整課程。
“你好,阿米戈。曾幾何時,你了解到要在代碼中編寫一串字符,你需要將它們用雙引號括起來。”
“是的,這給了我們一個字符串文字。不久前我才發現這個。”
“在我們的行業中,那是很久以前的事了。但現在這不是重點。相反,請告訴我如果我們需要在字符串文字中使用引號該怎麼辦?”
“嗯……一個包含引號的字符串——還有什麼比這更簡單的呢。我相信有一些辦法……”
“是的。假設我們想要顯示文本"Friends" was nominated for an "Oscar"
。我們該怎麼做呢?”
“老實說,我不知道。我想不出任何東西。”
“你無法通過邏輯找到解決方案。讓我告訴你該怎麼做。
代碼 | 筆記 |
---|---|
|
這個選項不會起作用!” |
“這個選項不起作用,因為編譯器將其解釋為完全不同的代碼:
代碼 | 筆記 |
---|---|
|
這個選項不會起作用!” |
“編譯器在代碼中遇到雙引號後,會將後面的內容視為字符串文字的開頭。下一個雙引號表示字符串文字的結尾。”
“那麼你如何在文字中寫雙引號呢?”
“有一種方法。它稱為轉義字符。您只需在文本字符串中寫引號。在引號之前,添加\(反斜杠)符號。
“這是正確編寫的字符串文字的樣子:
代碼 | 筆記 |
---|---|
|
這將工作! |
“編譯器將正確解釋所有內容,不會將反斜杠後的引號視為普通引號。
“更重要的是,如果你將這個字符串輸出到屏幕上,帶有反斜杠的引號將被正確處理,並且文本將在沒有任何反斜杠的情況下顯示:"Friends" was nominated for an "Oscar"
“嗯,我不會說這個超級方便……”
“但是你能做什麼,這些是規則。另一個重要的一點。反斜杠前面的引號代表一個字符:我們只是使用巧妙的符號,不會干擾編譯器識別我們的字符串文字的能力代碼。您可以將引號分配給char
變量:
代碼 | 筆記 |
---|---|
|
\" 是一個字符,不是兩個 |
|
這也是可能的:單引號內的雙引號 |
轉義字符時常見的情況

“除了雙引號之外,還有許多其他字符,編譯器會以特殊方式處理。例如,換行符。
“我們如何為文字添加換行符?還有一個特殊的組合:
\n
“如果您需要向字符串文字添加換行符,只需添加幾個字符” \n
。
例子:
代碼 | 控制台輸出 |
---|---|
|
|
“像這樣的特殊組合一共有8種,也叫轉義序列,分別是:
代碼 | 描述 |
---|---|
\t |
插入製表符 |
\b |
插入退格字符 |
\n |
插入換行符_ |
\r |
插入一個回車符 |
\f |
插入換頁符 |
\' |
插入單引號 |
\" |
插入雙引號 |
\\ |
插入反斜杠 |
“你已經給我看了其中兩個。其他6個是什麼意思?”
“我現在就全部解釋。
\t
是製表符
當文本中出現這段文字時,相當於在Tab
打字的同時按下了鍵。它移動其後的文本並使對齊文本成為可能。
例子:
代碼 | 控制台輸出 |
---|---|
|
|
\b
意思是“返回一個字符”
字符串中的這個序列相當於按下Backspace
鍵盤上的鍵。它刪除前面的字符:
代碼 | 控制台輸出 |
---|---|
|
|
\r
是回車符
此字符將光標移動到當前行的開頭而不更改文本(取決於 JDK 版本)。接下來顯示的任何內容都將覆蓋現有字符串。
例子:
代碼 | 控制台輸出 |
---|---|
|
World!ngs |
\f
是一個換頁符
這個符號是從第一台點陣打印機時代就流傳下來的。將此序列輸出到打印機將導致打印機簡單地送出當前頁面,而不打印任何文本,直到新頁面開始。
現在我們稱它為分頁符或新頁。
\\
是反斜杠
這裡的一切都很簡單。如果我們使用反斜杠來轉義文本中的字符,那麼我們如何在字符串中寫入反斜杠字符本身呢?
很簡單:在文本中添加一個反斜杠——你必須連續寫兩個。
例子:
代碼 | 控制台輸出 |
---|---|
|
編譯器會對未知的轉義字符大喊大叫。 |
|
這樣做就對了! |
“使用雙斜線是有道理的。但我還不能立即記住其他所有內容。我將不得不依靠你的提示。”
“漸漸地,你會記住你需要什麼。別擔心。對於其他一切,有谷歌。
Unicode編碼
“你已經知道屏幕上顯示的每個字符都對應一個特定的數字代碼。這些代碼的標準化集合稱為編碼。
“曾幾何時,當計算機剛剛發明時,七位(不到一個字節)就足以對每個字符進行編碼。第一個編碼僅包含 128 個字符。這種編碼稱為 ASCII 。 ”
“真是個奇怪的名字。”
“這沒什麼奇怪的,就是一個縮寫。ASCII代表美國信息交換標準代碼——一個標準的美國代碼表,用於可打印字符和一些特殊代碼。”
“它由 33 個不可打印的控製字符(影響文本和空格的處理方式)和 95 個可打印字符組成,包括數字、大寫和小寫拉丁字母以及幾個標點符號。

“隨著計算機的普及,每個國家都開始發布自己的編碼。通常,他們以 ASCII 為起點,用各自字母表中的符號替換很少使用的 ASCII 字符。
“隨著時間的推移,一個想法出現了:創建一個包含世界上每種編碼的所有字符的單一編碼。

”於是,1993年,Unicode編碼被創造出來,Java語言成為第一個使用這種編碼作為存儲文本標準的編程語言。現在Unicode是整個IT行業的標準。
“雖然 Unicode 本身是標準,但它有幾種表示或 Unicode 轉換格式 (UTF):UTF-8、UTF-16 和 UTF-32 等。
“Java 使用了 Unicode 編碼的高級版本——UTF-16:每個字符以 16 位(2 字節)編碼。它最多可容納 65,536 個字符!您幾乎可以在這種編碼中找到世界上所有字母表的每個字符。 “
“我希望我不需要記住它?”
“如果你願意,那就去吧!”
“好吧,好吧。我會使用這條規則:你不可能無所不知,但你可以穀歌一切。”
“採用合理的方法就是一切。因此,要使用其代碼在程序中編寫 Unicode 字符,您需要編寫\u
+十六進制代碼。例如,\u00A9
代碼 | 控制台輸出 |
---|---|
|
|
Unicode:代碼點
“640 KB 應該對每個人都足夠了!或者不是”。比爾蓋茨曾經說過。或不。至少這句話是他說的。”
“哈哈,640kb,連一個掃地機器人的大腦都裝不下。”
“生活很艱難,隨著時間的推移,UTF-16 編碼開始不夠用了。原來有很多亞洲語言,它們有很多字形。而所有這些字形根本無法塞入 2 個字節”
“那麼我們該怎麼辦?”
“使用更多字節!但是 char 類型只有 2 個字節,將其更改為 4 個字節並不是那麼容易:全世界已經編寫了數十億行 Java 代碼,如果 char 類型突然變成 4 個字節,Java 代碼就會崩潰機器。所以我們不能改變字符類型!
“還有另一種方法。記住我們如何通過在字符前面放置反斜杠來轉義字符。基本上,我們使用多個字符對單個字符進行編碼。Java 的創建者決定使用相同的方法。
“一些在視覺上顯示為單個字符的字符char
在字符串中被編碼為兩個 s:
代碼 | 控制台輸出 |
---|---|
|
🔊 |
“現在您的 Java 程序甚至可以將表情符號輸出到控制台 😎”
“我一定會用它來找點樂子的!”
GO TO FULL VERSION