CodeGym /Java Blog /Toto sisi /Java 轉義字符
John Squirrels
等級 41
San Francisco

Java 轉義字符

在 Toto sisi 群組發布
你好!在前面的課程中,我們已經熟悉了文本字符串,它們由Java 中的String類表示。您可能還記得,字符串是字符序列。這些字符可以是任何字母、數字、標點符號等。創建字符串時最主要的是整個序列必須用引號引起來:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
但是如果我們需要創建一個本身必須包含引號的字符串怎麼辦呢?例如,假設我們想向全世界介紹您最喜歡的書:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
編譯器似乎對某些事情不滿意!你認為問題可能是什麼?它與引號有什麼關係?事實上,這一切都很簡單。編譯器以一種非常特殊的方式解釋引號,即它希望字符串包含在引號中。並且每次編譯器看到 " 時,它都希望引號後面跟著第二個引號,並且它們之間的內容是編譯器要創建的字符串的文本。在我們的例子中,引號左右“暮光之城”這個詞在其他引號內。當編譯器到達這段文本時,它根本不明白它應該做什麼。引號表明必須創建一個字符串。但這就是編譯器已經正在做!原因如下:簡而言之,編譯器對預期的操作感到困惑。 “另一個引號?這是某種錯誤嗎?我已經在創建一個字符串了!或者我應該創建另一個?啊!...:/”我們需要 讓編譯器知道引號是命令( “創建一個字符串!”),當它只是一個字符時(“顯示單詞“Twilight”和引號!”)。為此,Java 使用字符轉義。這是使用特殊符號完成的:\。該符號通常稱為“反斜杠”。在 Java 中,反斜杠與要“轉義”的字符組合稱為控制序列。例如,\"是在屏幕上顯示引號的控制序列。在您的代碼中遇到此構造時,編譯器將理解這只是一個應該顯示在屏幕上的引號。讓我們試著用這本書改變我們的代碼:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
我們使用\來轉義我們的兩個“內部”引號。讓我們嘗試運行main()方法...控制台輸出:
My favorite book is "Twilight" by Stephanie Meyer
出色的!代碼完全按照我們想要的方式工作!引號絕不是我們可能需要轉義的唯一字符。假設我們想告訴別人我們的工作:

public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
另一個錯誤!你能猜出為什麼嗎?再一次,編譯器不知道該做什麼。畢竟,編譯器不知道\除了控制序列之外的任何東西!它期望反斜杠後跟一個特定字符,它必須以某種特殊方式(例如引號)解釋該字符。但是,在這種情況下,\後跟普通字母。於是編譯器又糊塗了。我們應該做什麼?和以前 完全一樣:我們只是在我們的\ !

public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
讓我們看看我們得到了什麼: 控制台輸出:
My work files are in D:\Work Projects\java
極好的!編譯器立即確定\是應與其餘字符一起顯示的普通字符。Java 有相當多的控制序列。這是完整列表:
  • \t - 製表符。
  • \b - 退格鍵(文本中的後退一步或刪除單個字符)。
  • \n - 換行。
  • \r - 回車。()
  • \f - 換頁。
  • \'單引號。
  • \"雙引號。
  • \\反斜杠。
因此,如果編譯器在文本中遇到\n ,它會理解這不僅僅是一個要顯示在控制台上的符號和字母,而是一個特殊的命令,用於“移動到新行!”。例如,如果我們想顯示一首詩的一部分,這可能很有用:

public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
這是我們得到的: 控制台輸出:
She walks in beauty, like the night, 
Of cloudless climes and starry skies 
And all that's best of dark and bright 
Meet in her aspect and her eyes...
正是我們想要的!編譯器識別出轉義序列並輸出 4 行詩的摘錄。

轉義 Unicode 字符

您需要了解的與轉義字符相關的另一個重要主題是 Unicode。Unicode 是一種標準字符編碼,包括世界上幾乎所有書面語言的符號。換句話說,它是代表任何語言中幾乎所有字符的特殊代碼列表!當然,這是一個很長的列表,沒有人能記住它 :) 如果您想知道它的來源以及為什麼需要它,請閱讀這篇內容豐富的文章:https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html 所有 Unicode 字符代碼的形式都是 " u+<十六進制數字>”。例如,眾所周知的版權符號由 u00A9 表示。因此,如果在 Java 中處理文本時需要使用此字符,則可以在文本中對其進行轉義!例如,我們要通知大家,CodeGym 擁有本課的版權:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
控制台輸出:
"Escaping characters", © 2019 CodeGym
太好了,一切順利!但這不僅僅是特殊符號!您可以使用 Unicode 和轉義字符對同時以不同語言書寫的文本進行編碼。甚至是用同一種語言的幾種不同方言編寫的文本!

public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " + 

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
控制台輸出:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
在這個例子中,我們使用字符代碼來構建一個由英文和三種(!)不同類型的漢字——繁體、簡體和拉丁文(拼音)組成的字符串。這就是總結!現在您對轉義字符有了足夠的了解,可以在您的工作中使用這個出色的工具 :) 為了鞏固您所學的知識,我們建議您觀看我們的 Java 課程中的視頻課程

更多閱讀:

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