JavaRush /Java Blog /Random-TW /轉義字符

轉義字符

在 Random-TW 群組發布
你好!在前面的講座中,我們已經熟悉了字串,字串由Java中的類別表示String。您可能還記得,字串是字元序列。符號可以是任何東西——字母、數字、標點符號等等。最主要的是,在創建字串時,整個序列都用引號引起來:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
但是,如果我們需要建立一個內部也包含引號的字串,會發生什麼事呢?例如,我們想告訴世界我們最喜歡的書:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
編譯器似乎對某些事情不滿意!您認為錯誤的原因可能是什麼?為什麼會出現特別帶有引號的錯誤?事實上,編譯器以嚴格定義的方式感知引號,即,它將字串包裝在其中。每次他看到一個字符時",他都期望後面會出現相同的字符,並且在它們之間會有他(編譯器)必須創建的行的文本。在我們的例子中,「Twilight」一詞周圍的引號位於其他引號內。當編譯器遇到這段文字時,它根本不明白他們想從中得到什麼。似乎有一個引號,這意味著它應該創建一個字串。但他已經在這麼做了!正是這個原因。簡而言之,此時編譯器誤解了他們想要從中得到什麼。 「另一個引用?這是某種錯誤嗎?我已經創建了一個字串!或者我應該創建另一個字串?呃......:/」 當引用是它的命令時,我們需要向編譯器解釋(“創建字串!”),當它是一個簡單的符號時(“顯示單字“Twilight”以及引號!”)。為了實現這一點,Java 使用字元轉義。這是使用特殊字元完成的。像這樣:\。在日常生活中它被稱為“反斜線”,但在Java中它(與要轉義的字元組合)被稱為轉義序列。例如,\"這裡是一個用於在螢幕上顯示引號的控制序列。在程式碼中遇到這樣的結構後,編譯器會理解這只是一個需要在螢幕上顯示的「引號」字元。讓我們試著用這本書來改變我們的程式碼:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
我們用 . 轉義了兩個「內部」引號\。讓我們嘗試運行該方法main()...控制台輸出:

Моя любимая книга - "Сумерки" Стефани Майер
太棒了,程式碼完全按照需要工作了!引號遠不是我們可能需要字元轉義的唯一情況。例如,我們想向某人介紹我們的工作:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
又犯了一個錯誤!你能猜出原因是什麼嗎?編譯器又不明白怎麼做。畢竟符號對他來說無非就是一個控制序列\而已!它期望斜槓後面應該有一些必須以某種特殊方式解釋的字元(例如,引號)。然而,這裡遵循的是常規字母。於是編譯器又混亂了。怎麼辦?和上次一模一樣:只需在我們的中再添加一個即可! \\\
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
讓我們看看會產生什麼結果:控制台輸出:

Мои рабочие файлы лежат в папке D:\Work Projects\java
極好的!編譯器立即確定這些\是普通字符,需要與其餘字符一起輸出到控制台。Java 中有相當多的轉義序列。這是他們的完整清單:
  • \t 製表符。
  • \b 文字中的回車字元後退一步或刪除一行中的一個字元(退格鍵)。
  • \n 換行符。
  • \r 回車符。
  • \f 頁面運行。
  • \' 單引號字元。
  • \" 雙引號字元。
  • \\反斜線字元 (\)。
因此,如果編譯器在文本中遇到一個符號\n,它會明白這不僅僅是一個需要輸出到控制台的符號和字母,而是一個特殊的命令——“換行!” 例如,如果我們想將一首詩輸出到控制台,這對我們很有用:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
這就是我們得到的: 控制台輸出:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
正是所需要的!編譯器辨識出轉義序列並輸出一段 4 行的詩句。

統一碼

您需要了解的另一個與字元轉義相關的重要主題是UnicodeUnicode是一種字元編碼標準,包含了世界上幾乎所有書寫語言的字元。換句話說,這是一個特殊代碼列表,其中幾乎任何語言的任何字元都有一個代碼!當然,這個清單非常大,沒有人能記住它:)如果您對它的來源和為什麼需要它感興趣,請閱讀關於Habrahabr的資訊豐富的文章。Unicode中所有的字元編碼都是「字母u+十六進位數字」。例如,著名的版權符號由代碼u00A9表示。因此,如果您在 Java 中處理文字時需要使用此字符,您可以在文字中對其進行轉義!例如,我們想讓大家知道本次講座的版權歸 JavaRush 所有:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
控制台輸出:

Лекция "Экранирование символов", © 2018 Javarush
太棒了,一切順利!但特殊字元並不是一切!使用 Unicode 和字元轉義,您可以同時對以不同語言編寫的文字進行編碼。甚至是同一種語言的幾種不同方言!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
控制台輸出:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
在這個例子中,在知道字元代碼的情況下,我們編寫了一個由西里爾字母和三種(!)不同類型的書寫漢字組成的字串 - 古典、簡體和拉丁(拼音)。基本上就是這樣!現在您對字元轉義已經有了足夠的了解,可以在工作中使用這個工具了:)如果一切還不完全清楚,我建議您閱讀這篇文章:它將是一個很好的補充。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION