1. เหตุผลในการหลบหนีตัวละคร
กาลครั้งหนึ่งนานมาแล้ว คุณได้เรียนรู้ว่าในการเขียนสตริงของอักขระในโค้ด คุณต้องใส่เครื่องหมายคำพูดคู่ ผลลัพธ์คือสตริงตัวอักษร
แต่เราจะทำอย่างไรหากต้องการเครื่องหมายคำพูดภายในสตริงตัวอักษร สตริงที่มีเครื่องหมายคำพูด — อะไรจะง่ายกว่านี้
สมมติว่าเราต้องการแสดง"Friends" was nominated for an "Oscar"
ข้อความ คุณทำอย่างนั้นได้อย่างไร?
รหัส | หมายเหตุ |
---|---|
|
ตัวเลือกนี้จะไม่ทำงาน! |
ปัญหาคือคอมไพเลอร์คิดว่าคุณกำลังเขียนโค้ดที่ไม่คาดคิดทั้งหมด:
รหัส | หมายเหตุ |
---|---|
|
ตัวเลือกนี้จะไม่ทำงาน! |
หลังจากที่คอมไพลเลอร์พบเครื่องหมายอัญประกาศคู่ในโค้ด คอมไพลเลอร์จะถือว่าสิ่งต่อไปนี้เป็นจุดเริ่มต้นของสตริงลิเทอรัล เครื่องหมายอัญประกาศคู่ถัดไประบุจุดสิ้นสุดของตัวอักษรสตริง
คุณจะเขียนเครื่องหมายคำพูดคู่ภายในตัวอักษรได้อย่างไร?
2. การหลบหนีตัวละคร
มีวิธีการ เรียกว่าอักขระหนี คุณเพียงแค่เขียนเครื่องหมายคำพูดภายในสตริงข้อความ และก่อนเครื่องหมายคำพูด ให้คุณเพิ่ม เครื่องหมาย \
( แบ็กสแลช )
นี่คือลักษณะตัวอักษรของสตริงเมื่อเขียนอย่างถูกต้อง:
รหัส | หมายเหตุ |
---|---|
|
สิ่งนี้จะได้ผล! |
คอมไพเลอร์จะตีความทุกอย่างถูกต้องและจะไม่ถือว่าเครื่องหมายคำพูดหลัง เครื่องหมาย แบ็กสแลชเป็นเครื่องหมายคำพูดปกติ
ยิ่งไปกว่านั้น หากคุณส่งออกสตริงนี้ไปที่หน้าจอ คำพูดที่มีแบ็กสแลชจะได้รับการประมวลผลอย่างถูกต้อง และข้อความจะแสดงโดยไม่มีแบ็กสแลช:"Friends" was nominated for an "Oscar"
อีกจุดสำคัญ เครื่องหมายอัญประกาศที่นำหน้าด้วยเครื่องหมายแบ็กสแลชแสดงถึงอักขระตัวเดียว: เราใช้เครื่องหมายง่ายๆ ที่ไม่ขัดขวางความสามารถของคอมไพเลอร์ในการจดจำตัวอักษรสตริงในโค้ดของเรา คุณสามารถกำหนดคำพูดให้กับchar
ตัวแปร:
รหัส | หมายเหตุ |
---|---|
|
\" เป็นตัวละครเดียวไม่ใช่สองตัว |
|
นอกจากนี้ยังเป็นไปได้: เครื่องหมายอัญประกาศคู่ภายในอัญประกาศเดี่ยว |
3. สถานการณ์ทั่วไปที่เกิดขึ้นเมื่อหลบหนีตัวละคร
นอกจากเครื่องหมายอัญประกาศคู่แล้ว ยังมีอักขระอื่นๆ อีกมากมายที่คอมไพเลอร์จัดการในลักษณะพิเศษ ตัวอย่างเช่น ตัวแบ่งบรรทัด
เราจะเพิ่มตัวแบ่งบรรทัดให้กับตัวอักษรได้อย่างไร นอกจากนี้ยังมีชุดค่าผสมพิเศษสำหรับสิ่งนี้:
\n
หากคุณต้องการเพิ่มตัวแบ่งบรรทัดให้กับตัวอักษรของสตริง คุณเพียงแค่เพิ่มอักขระสองสามตัว\n
:
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
มีชุดค่าผสมพิเศษทั้งหมด 8 ชุดเช่นนี้ ซึ่งเรียกอีกอย่างว่าEscape Sequence พวกเขาอยู่ที่นี่:
รหัส | คำอธิบาย |
---|---|
\t |
แทรกอักขระแท็บ |
\b |
แทรกอักขระย้อนกลับ |
\n |
แทรกอักขระขึ้นบรรทัดใหม่ |
\r |
ใส่อักขระขึ้นบรรทัดใหม่ |
\f |
แทรก อักขระ ฟีดหน้า |
\' |
ใส่เครื่องหมายอัญประกาศเดี่ยว |
\" |
ใส่เครื่องหมายอัญประกาศคู่ |
\\ |
ใส่แบ็กสแลช |
คุณคุ้นเคยกับสองคนนี้ แต่อีก 6 คนหมายถึงอะไร
\t
เป็นอักขระแท็บ
เมื่อข้อความนี้ปรากฏในข้อความ จะเทียบเท่ากับการกดTab
ปุ่มขณะพิมพ์ มันเลื่อนข้อความที่ตามมาและทำให้สามารถจัดแนวข้อความได้
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
\b
หมายถึง 'ย้อนกลับหนึ่งตัวอักษร'
ลำดับนี้ในสตริงเทียบเท่ากับการกดBackspace
ปุ่มบนแป้นพิมพ์ มันลบอักขระที่อยู่ข้างหน้า:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
\r
เป็นอักขระกลับรถ
อักขระนี้จะเลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดปัจจุบันโดยไม่เปลี่ยนข้อความ สิ่งถัดไปที่แสดงถัดไปจะเขียนทับสตริงที่มีอยู่
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
\f
เป็นตัวอักษรหน้าฟีด
สัญลักษณ์นี้มาถึงเราตั้งแต่ยุคของเครื่องพิมพ์ดอทเมตริกซ์เครื่องแรก การแสดงลำดับนี้ไปยังเครื่องพิมพ์จะทำให้เครื่องพิมพ์ป้อนแผ่นงานปัจจุบันโดยไม่ต้องพิมพ์ข้อความใดๆ จนกว่าจะเริ่มหน้าใหม่
ตอนนี้เราจะเรียกมันว่าตัวแบ่งหน้าหรือหน้าใหม่
\\
เป็นแบ็กสแลช
ทุกอย่างตรงไปตรงมาที่นี่ หากเราใช้เครื่องหมายแบ็กสแลชเพื่อหลีกอักขระในข้อความ เราจะเขียนอักขระแบ็กสแลชในสตริงได้อย่างไร
ง่ายมาก: เพิ่มเครื่องหมายแบ็กสแลชให้กับข้อความ — คุณต้องเขียนสองตัวติดกัน
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
คอมไพเลอร์จะตะโกนใส่คุณสำหรับอักขระที่ไม่รู้จักที่หลบหนี |
|
เท่านี้ก็เรียบร้อย! |
4. การเข้ารหัส Unicode
ดังที่คุณทราบแล้ว อักขระแต่ละตัวที่แสดงบนหน้าจอจะสอดคล้องกับรหัสตัวเลขเฉพาะ ชุดรหัสที่เป็นมาตรฐานเหล่านี้เรียกว่าการเข้ารหัส
กาลครั้งหนึ่งนานมาแล้ว เมื่อคอมพิวเตอร์ถูกประดิษฐ์ขึ้นใหม่ เจ็ดบิต (น้อยกว่าหนึ่งไบต์) ก็เพียงพอที่จะเข้ารหัสอักขระทุกตัว การเข้ารหัสครั้งแรกมีอักขระเพียง 128 ตัว การเข้ารหัสนี้เรียกว่าASCII
ASCIIย่อมาจาก American Standard Code for Information Interchange ซึ่งเป็นตารางรหัสอเมริกันมาตรฐานสำหรับอักขระที่พิมพ์ได้และรหัสพิเศษบางตัว
ประกอบด้วยอักขระควบคุมที่ไม่สามารถพิมพ์ได้ 33 ตัว (ซึ่งส่งผลต่อวิธีประมวลผลข้อความและช่องว่าง) และอักขระที่สามารถพิมพ์ได้ 95 ตัว รวมถึงตัวเลข ตัวอักษรละตินตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และเครื่องหมายวรรคตอนหลายตัว
เมื่อคอมพิวเตอร์ได้รับความนิยมมากขึ้น แต่ละประเทศก็เริ่มเผยแพร่การเข้ารหัสของตนเอง โดยปกติแล้ว พวกเขาใช้ ASCII เป็นจุดเริ่มต้นและแทนที่อักขระ ASCII ที่ไม่ค่อยได้ใช้ด้วยสัญลักษณ์จากตัวอักษรที่เกี่ยวข้อง
เมื่อเวลาผ่านไป เกิดแนวคิด: สร้างการเข้ารหัสเดียวที่มีอักขระทั้งหมดของการเข้ารหัสทั้งหมดในโลก
ดังนั้น ในปี 1993 การเข้ารหัส Unicodeจึงถูกสร้างขึ้น และภาษา Java กลายเป็นภาษาโปรแกรมแรกที่ใช้การเข้ารหัสนี้เป็นมาตรฐานในการจัดเก็บข้อความ ปัจจุบัน Unicode เป็นมาตรฐานสำหรับอุตสาหกรรมไอทีทั้งหมด
แม้ว่า Unicode จะเป็นมาตรฐาน แต่ก็มีรูปแบบการแปลง Unicode (UTF) หลายรูปแบบ ได้แก่ UTF-8, UTF-16 และ UTF-32 เป็นต้น
Java ใช้การเข้ารหัส Unicode เวอร์ชันขั้นสูง — UTF-16: อักขระแต่ละตัวเข้ารหัสใน 16 บิต (2 ไบต์) รองรับได้ถึง 65,536 ตัวอักษร!
คุณสามารถค้นหาอักขระเกือบทุกตัวจากทุกตัวอักษรในโลกได้ในการเข้ารหัสนี้ โดยธรรมชาติแล้วไม่มีใครจดจำสิ่งทั้งหมดได้ คุณไม่สามารถรู้ทุกอย่าง แต่คุณสามารถ google ได้ทุกอย่าง
ในการเขียนอักขระ Unicode ใน โปรแกรมของคุณโดยใช้รหัส คุณต้องเขียน\u
+ รหัสเป็นเลขฐานสิบหก ตัวอย่างเช่น,\u00A9
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
5. Unicode: จุดรหัส
"640 กิโลไบต์ควรจะเพียงพอสำหรับทุกคนหรือไม่" (อ้างอิงจาก Bill Gates)
ชีวิตนั้นยากลำบาก และเมื่อเวลาผ่านไป การเข้ารหัส UTF-16 เริ่มไม่เพียงพอ ปรากฎว่ามีภาษาเอเชียจำนวนมากและมีสัญลักษณ์มากมาย และร่ายมนตร์เหล่านี้ไม่สามารถอัดเป็น 2 ไบต์ได้
ทำอะไรได้บ้าง? ใช้ไบต์มากขึ้น !
แต่ประเภทถ่านมีเพียง 2 ไบต์และการเปลี่ยนเป็น 4 นั้นไม่ใช่เรื่องง่าย: มีการเขียนโค้ด Java หลายพันล้านบรรทัดทั่วโลก ซึ่งจะเสียหายหากประเภทถ่านกลายเป็น 4 ไบต์ในเครื่อง Java เราจึงเปลี่ยนประเภทถ่านไม่ได้!
มีอีกแนวทางหนึ่ง จำวิธีที่เราหลีกเลี่ยงอักขระด้วยการใส่เครื่องหมายแบ็กสแลชไว้หน้าอักขระเหล่านั้น โดยพื้นฐานแล้ว เราเข้ารหัสอักขระตัวเดียวโดยใช้อักขระหลายตัว
ผู้สร้าง Java ตัดสินใจใช้วิธีเดียวกัน
อักขระบางตัวที่ปรากฏเป็นภาพเดียวจะถูกเข้ารหัสเป็นchar
อักขระสองตัวในสตริง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
ตอนนี้โปรแกรม Java ของคุณสามารถส่งออกอิโมจิไปยังคอนโซลได้แล้ว 😎