โค้ดยิม/จาวาบล็อก/สุ่ม/อักขระหนีจาวา
John Squirrels
ระดับ
San Francisco

อักขระหนีจาวา

เผยแพร่ในกลุ่ม
สวัสดี! ในบทเรียนก่อนหน้านี้ เราได้ทำความคุ้นเคยกับสตริงข้อความซึ่งแสดงโดย คลาส สตริงในภาษาจาวา อย่างที่คุณคงจำได้ สตริงคือลำดับของอักขระ อักขระเหล่านี้อาจเป็นตัวอักษร ตัวเลข เครื่องหมายวรรคตอน และอื่นๆ สิ่งสำคัญเมื่อสร้างสตริงคือลำดับทั้งหมดจะต้องอยู่ในเครื่องหมายอัญประกาศ:
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" อยู่ในเครื่องหมายอัญประกาศอื่นๆเมื่อ compiler มาถึงส่วนนี้ของข้อความ มันก็แค่ไม่เข้าใจว่าจะต้องทำอะไร เครื่องหมาย quote บ่งบอกว่าต้องสร้าง string แต่นั่นเป็นสิ่งที่ compiler เรียบร้อยแล้วทำ! นี่คือเหตุผล: พูดง่ายๆ ก็คือ คอมไพเลอร์สับสนเกี่ยวกับสิ่งที่คาดว่าจะทำ "เครื่องหมายอัญประกาศอื่น? นี่เป็นข้อผิดพลาดบางอย่างหรือไม่ ฉันกำลังสร้างสตริงแล้ว! หรือฉันควรสร้างเครื่องหมายอื่น? Argh!...:/" เราจำเป็นต้องแจ้งให้คอมไพเลอร์ทราบเมื่อเครื่องหมายคำพูดเป็นคำสั่ง ( "สร้างสตริง!") และเมื่อเป็นเพียงอักขระ ("แสดงคำว่า "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 - backspace (ถอยหลังหนึ่งก้าวในข้อความหรือการลบอักขระตัวเดียว)
  • \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.
ในตัวอย่างนี้ เราใช้รหัสอักขระเพื่อสร้างสตริงที่ประกอบด้วยภาษาอังกฤษและอักขระจีนสาม (!) ประเภทที่แตกต่างกัน ได้แก่ ตัวเต็ม ตัวย่อ และละติน (พินอิน) และนั่นก็เป็นบทสรุป! ตอนนี้คุณรู้เรื่องการ Escape ตัวอักษรเพียงพอแล้วและใช้เครื่องมือที่ยอดเยี่ยมนี้ในการทำงานของคุณ :) เพื่อเสริมสิ่งที่คุณเรียนรู้ เราขอแนะนำให้คุณดูบทเรียนวิดีโอจากหลักสูตร Java ของเรา
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ