CodeGym/Blog Java/Ngẫu nhiên/Ký tự thoát Java

Ký tự thoát Java

Xuất bản trong nhóm
CHÀO! Trong các bài học trước, chúng ta đã làm quen với các chuỗi văn bản, được biểu diễn bởi lớp String trong Java. Như bạn có thể nhớ, một chuỗi là một chuỗi các ký tự. Các ký tự này có thể là bất kỳ chữ cái, chữ số, dấu chấm câu, v.v. Điều chính khi tạo một chuỗi là toàn bộ chuỗi phải được đặt trong dấu ngoặc kép:
public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Nhưng chúng ta phải làm gì nếu cần tạo một chuỗi mà chính nó phải chứa dấu ngoặc kép? Ví dụ: giả sử chúng tôi muốn nói với cả thế giới về cuốn sách yêu thích của bạn:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Có vẻ như trình biên dịch không hài lòng về điều gì đó! Bạn nghĩ vấn đề có thể là gì? Và nó có liên quan gì đến dấu ngoặc kép? Trên thực tế, tất cả đều rất đơn giản. Trình biên dịch diễn giải các dấu ngoặc kép theo một cách rất cụ thể, nghĩa là nó mong đợi các chuỗi được bao bọc trong chúng. Và mỗi khi trình biên dịch nhìn thấy ", nó hy vọng rằng dấu ngoặc kép sẽ được theo sau bởi dấu ngoặc kép thứ hai và nội dung giữa chúng là văn bản của một chuỗi sẽ được trình biên dịch tạo ra. Trong trường hợp của chúng tôi, các dấu ngoặc kép xung quanh từ "Twilight" nằm bên trong các dấu ngoặc kép khác . Khi trình biên dịch tiếp cận đoạn văn bản này, nó chỉ đơn giản là không hiểu nó sẽ làm gì. Dấu ngoặc kép gợi ý rằng một chuỗi phải được tạo ra. Nhưng đó là những gì trình biên dịch làm đãđang làm! Đây là lý do tại sao: nói một cách đơn giản, trình biên dịch bị nhầm lẫn về những gì nó dự kiến ​​sẽ làm. "Một dấu ngoặc kép khác? Đây có phải là một loại nhầm lẫn nào đó không? Tôi đang tạo một chuỗi! Hay tôi nên tạo một chuỗi khác? Argh!...:/" Chúng ta cần cho trình biên dịch biết khi nào một dấu ngoặc kép là một lệnh ( "tạo một chuỗi!") và khi nó chỉ là một ký tự ("hiển thị từ "Twilight" cùng với dấu ngoặc kép!"). Để làm điều này, Java sử dụng thoát ký tự . Điều này được thực hiện bằng một ký hiệu đặc biệt: \ . Biểu tượng này thường được gọi là "dấu gạch chéo ngược". Trong Java, dấu gạch chéo ngược kết hợp với ký tự được "thoát" được gọi là chuỗi điều khiển . Ví dụ: \"là một chuỗi điều khiển để hiển thị dấu ngoặc kép trên màn hình. Khi gặp cấu trúc này trong mã của bạn, trình biên dịch sẽ hiểu rằng đây chỉ là một dấu ngoặc kép sẽ được hiển thị trên màn hình. Hãy thử thay đổi mã của chúng tôi bằng cuốn sách:
public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Chúng tôi đã sử dụng \ để thoát khỏi hai dấu ngoặc kép "nội bộ" của mình. Hãy thử chạy phương thức main() ... Đầu ra của bàn điều khiển:
My favorite book is "Twilight" by Stephanie Meyer
Xuất sắc! Mã hoạt động chính xác như cách chúng tôi muốn! Dấu ngoặc kép không phải là ký tự duy nhất mà chúng ta có thể cần phải thoát. Giả sử chúng ta muốn nói với ai đó về công việc của mình:
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);
   }
}
Một lỗi khác! Bạn có đoán được tại sao không? Một lần nữa, trình biên dịch không hiểu phải làm gì. Rốt cuộc, trình biên dịch không biết \ là bất cứ thứ gì khác ngoài chuỗi điều khiển ! Nó mong đợi dấu gạch chéo ngược được theo sau bởi một ký tự nhất định mà bằng cách nào đó nó phải diễn giải theo một cách đặc biệt (chẳng hạn như dấu ngoặc kép). Tuy nhiên, trong trường hợp này, \ được theo sau bởi các chữ cái thông thường. Vì vậy, trình biên dịch lại bị nhầm lẫn. Chúng ta nên làm gì? Chính xác điều tương tự như trước đây: chúng ta chỉ cần thêm \ khác vào \ !
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);

   }
}
Hãy xem những gì chúng tôi nhận được: Đầu ra bảng điều khiển:
My work files are in D:\Work Projects\java
Siêu! Trình biên dịch ngay lập tức xác định rằng \ là các ký tự thông thường sẽ được hiển thị cùng với phần còn lại. Java có khá nhiều trình tự điều khiển. Đây là danh sách đầy đủ:
  • \t - tab.
  • \b - backspace (lùi một bước trong văn bản hoặc xóa một ký tự).
  • \n - dòng mới.
  • \r - trả về vận chuyển. ()
  • \f - nguồn cấp dữ liệu biểu mẫu.
  • \' trích dẫn đơn.
  • \" trích dẫn kép.
  • \\ dấu gạch chéo ngược.
Do đó, nếu trình biên dịch gặp \n trong văn bản, nó sẽ hiểu rằng đây không chỉ là một ký hiệu và một chữ cái để hiển thị trên bàn điều khiển, mà là một lệnh đặc biệt để "di chuyển đến một dòng mới!". Ví dụ: điều này có thể hữu ích nếu chúng ta muốn hiển thị một phần của bài thơ:
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);
   }
}
Đây là những gì chúng tôi nhận được: Đầu ra bảng điều khiển:
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...
Chỉ là những gì chúng tôi muốn! Trình biên dịch đã nhận ra trình tự thoát và xuất ra một đoạn trích của bài thơ trên 4 dòng.

Thoát các ký tự Unicode

Một chủ đề quan trọng khác mà bạn cần biết liên quan đến các ký tự thoát là Unicode. Unicode là một mã hóa ký tự tiêu chuẩn bao gồm các ký hiệu của hầu hết mọi ngôn ngữ viết trên thế giới. Nói cách khác, đó là một danh sách các mã đặc biệt đại diện cho gần như mọi ký tự trong bất kỳ ngôn ngữ nào! Đương nhiên, đây là một danh sách rất dài và không ai thuộc lòng nó :) Nếu bạn muốn biết nó đến từ đâu và tại sao nó lại cần thiết, hãy đọc bài viết thông tin này: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Tất cả các mã ký tự Unicode có dạng " u+<chữ số thập lục phân>". Ví dụ: ký hiệu bản quyền nổi tiếng được biểu thị bằng u00A9. Vì vậy, nếu bạn cần sử dụng ký tự này khi làm việc với văn bản trong Java, bạn có thể thoát ký tự đó trong văn bản của mình! Ví dụ: chúng tôi muốn để thông báo cho mọi người rằng CodeGym sở hữu bản quyền của bài học này:
public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Đầu ra bảng điều khiển:
"Escaping characters", © 2019 CodeGym
Tuyệt vời, tất cả đã thành công! Nhưng nó không chỉ là về các biểu tượng đặc biệt! Bạn có thể sử dụng Unicode và các ký tự thoát để mã hóa văn bản được viết đồng thời bằng các ngôn ngữ khác nhau. Và thậm chí cả văn bản được viết bằng nhiều phương ngữ khác nhau của cùng một ngôn ngữ!
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");
   }
}
Đầu ra bảng điều khiển:
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.
Trong ví dụ này, chúng tôi đã sử dụng mã ký tự để tạo một chuỗi bao gồm tiếng Anh và ba (!) loại ký tự tiếng Trung khác nhau — phồn thể, giản thể và Latinh (Bính âm). Và đó là về tổng hợp nó lên! Bây giờ bạn đã biết đủ về thoát ký tự để sử dụng công cụ tuyệt vời này trong công việc của mình :) Để củng cố những gì bạn đã học, chúng tôi khuyên bạn nên xem một video bài học từ Khóa học Java của chúng tôi
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào