ตัวอย่างการบรรยายพร้อมผู้ให้คำปรึกษาซึ่งเป็นส่วนหนึ่งของหลักสูตร Codegym University ลงทะเบียนสำหรับหลักสูตรเต็ม


"สวัสดี Amigo กาลครั้งหนึ่ง คุณได้เรียนรู้ว่าในการที่จะเขียนสตริงของอักขระในโค้ด คุณต้องใส่เครื่องหมายคำพูดคู่"

"ใช่ และนั่นทำให้เรามีตัวอักษรสตริงไม่นานมานี้ที่ฉันรู้เรื่องนี้"

"ในอาชีพของเรา เรื่องนั้นนานมาแล้ว แต่นั่นไม่ใช่ประเด็นในตอนนี้ โปรดบอกฉันว่าต้องทำอย่างไร หากเราต้องการเครื่องหมายอัญประกาศภายในตัวอักษรสตริง"

"อืม... สตริงที่มีเครื่องหมายคำพูด — อะไรจะง่ายกว่านี้ ฉันแน่ใจว่ามีวิธีบางอย่าง..."

"ใช่ สมมติว่าเราต้องการแสดงข้อความ"Friends" was nominated for an "Oscar"เราจะทำอย่างไร"

"พูดตามตรง ฉันไม่มีความคิดเลย ฉันคิดอะไรไม่ออกเลย"

"คุณไม่สามารถแก้ปัญหาด้วยตรรกะได้ ให้ฉันแสดงให้คุณเห็นว่าต้องทำอย่างไร

รหัส หมายเหตุ
String s = ""Friends" was nominated for an "Oscar"";
ตัวเลือกนี้ใช้ไม่ได้!"

"ตัวเลือกนี้ใช้ไม่ได้ เพราะคอมไพเลอร์แปลรหัสนี้เป็นโค้ดที่ต่างไปจากเดิมอย่างสิ้นเชิง:

รหัส หมายเหตุ
String s = ""Friends" was nominated for an "Oscar"";
ตัวเลือกนี้ใช้ไม่ได้!"

"หลังจากที่คอมไพลเลอร์พบอัญประกาศคู่ในโค้ด จะถือว่าสิ่งต่อไปนี้เป็นจุดเริ่มต้นของสตริงลิเทอรัล เครื่องหมายอัญประกาศคู่ถัดไปจะระบุจุดสิ้นสุดของสตริงลิเทอรัล"

"คุณจะเขียนเครื่องหมายคำพูดคู่ภายในตัวอักษรได้อย่างไร"

"มีวิธีหนึ่ง เรียกว่าอักขระหลีกคุณเพียงแค่เขียนเครื่องหมายคำพูดภายในสตริงข้อความ และก่อนเครื่องหมายคำพูด คุณเพิ่มสัญลักษณ์\ ( แบ็กสแลช )

"นี่คือลักษณะตัวอักษรของสตริงเมื่อเขียนอย่างถูกต้อง:

รหัส หมายเหตุ
String s = "\"Friends\" was nominated for an \"Oscar\"";
สิ่งนี้จะได้ผล!

"คอมไพเลอร์จะตีความทุกอย่างถูกต้องและจะไม่ถือว่าเครื่องหมายคำพูดหลัง เครื่องหมาย แบ็กสแลชเป็นเครื่องหมายคำพูดปกติ

"ยิ่งไปกว่านั้น หากคุณส่งออกสตริงนี้ไปที่หน้าจอ คำพูดที่มีแบ็กสแลชจะได้รับการประมวลผลอย่างถูกต้อง และข้อความจะแสดงโดยไม่มีแบ็กสแลช:"Friends" was nominated for an "Oscar"

"ฉันจะไม่พูดว่ามันสะดวกสุด ๆ ... "

"แต่คุณทำอะไรได้บ้าง นั่นคือกฎ จุดสำคัญอีกจุดหนึ่ง เครื่องหมายอัญประกาศที่นำหน้าด้วยเครื่องหมายแบ็กสแลชแสดงถึงอักขระตัวเดียว เราแค่ใช้สัญกรณ์เรียบ ๆ ที่ไม่รบกวนความสามารถของคอมไพเลอร์ในการจดจำตัวอักษรสตริงในของเรา รหัส คุณสามารถกำหนดคำพูดให้กับcharตัวแปร:

รหัส หมายเหตุ
char c = '\"';
\"เป็นตัวละครเดียวไม่ใช่สองตัว
char c = '"';
นอกจากนี้ยังเป็นไปได้: เครื่องหมายอัญประกาศคู่ภายในอัญประกาศเดี่ยว

สถานการณ์ทั่วไปที่เกิดขึ้นเมื่อหนีอักขระ

"นอกจากเครื่องหมายอัญประกาศคู่แล้ว ยังมีอักขระอื่นๆ อีกมากมายที่คอมไพเลอร์จัดการในลักษณะพิเศษ ตัวอย่างเช่น ตัวแบ่งบรรทัด

"เราจะเพิ่มตัวแบ่งบรรทัดให้กับตัวอักษรได้อย่างไร นอกจากนี้ยังมีชุดค่าผสมพิเศษสำหรับสิ่งนี้:

\n
อักขระตัวแบ่งบรรทัด

"ถ้าคุณต้องการเพิ่มตัวแบ่งบรรทัดให้กับตัวอักษรของสตริง คุณเพียงแค่เพิ่มอักขระสองสามตัว\n"

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
System.out.println("Best regards, \n Anonymous");
             
Best regards,
Anonymous

"มีทั้งหมด 8 ชุดค่าผสมพิเศษเช่นนี้ ซึ่งเรียกอีกอย่างว่าEscape Sequencesซึ่งได้แก่:

รหัส คำอธิบาย
\t แทรกอักขระแท็บ
\b แทรกอักขระbackspace
\n แทรกอักขระขึ้นบรรทัดใหม่
\r ใส่อักขระขึ้นบรรทัดใหม่
\f แทรก อักขระ ฟีดหน้า
\' ใส่เครื่องหมายอัญประกาศเดี่ยว
\" ใส่เครื่องหมายอัญประกาศคู่
\\ ใส่แบ็กสแลช

“คุณแสดงให้ฉันดู 2 รายการแล้ว อีก 6 รายการที่เหลือหมายความว่าอย่างไร”

“ฉันจะอธิบายทั้งหมดเดี๋ยวนี้

\tเป็นอักขระแท็บ

เมื่อข้อความนี้ปรากฏในข้อความ จะเทียบเท่ากับการกดTabปุ่มขณะพิมพ์ มันเลื่อนข้อความที่ตามมาและทำให้สามารถจัดแนวข้อความได้

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bหมายถึง 'ย้อนกลับหนึ่งตัวอักษร'

ลำดับนี้ในสตริงเทียบเท่ากับการกดBackspaceปุ่มบนแป้นพิมพ์ มันลบอักขระที่อยู่ข้างหน้า:

รหัส เอาต์พุตคอนโซล
System.out.println("Hello\b\b World");
Hel World

\rเป็นอักขระกลับรถ

อักขระนี้ย้ายเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดปัจจุบันโดยไม่เปลี่ยนข้อความ (ขึ้นอยู่กับเวอร์ชันของ JDK) สิ่งถัดไปที่แสดงถัดไปจะเขียนทับสตริงที่มีอยู่

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
System.out.println("Greetings\r World!");
World!ngs

\fเป็นตัวอักษรหน้าฟีด

สัญลักษณ์นี้มาถึงเราตั้งแต่ยุคของเครื่องพิมพ์ดอทเมตริกซ์เครื่องแรก การแสดงลำดับนี้ไปยังเครื่องพิมพ์จะทำให้เครื่องพิมพ์ป้อนแผ่นงานปัจจุบันโดยไม่ต้องพิมพ์ข้อความใดๆ จนกว่าจะเริ่มหน้าใหม่

ตอนนี้เราจะเรียกมันว่าตัวแบ่งหน้าหรือหน้าใหม่

\\เป็นแบ็กสแลช

ทุกอย่างตรงไปตรงมาที่นี่ หากเราใช้เครื่องหมายแบ็กสแลชเพื่อหลีกอักขระในข้อความ เราจะเขียนอักขระแบ็กสแลชในสตริงได้อย่างไร

ง่ายมาก: เพิ่มเครื่องหมายแบ็กสแลชให้กับข้อความ — คุณต้องเขียนสองตัวติดกัน

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
System.out.println("c:\projects\my\first");
คอมไพเลอร์จะตะโกนใส่คุณสำหรับอักขระที่ไม่รู้จักที่หลบหนี
System.out.println("c:\\projects\\my\\first");
เท่านี้ก็เรียบร้อย!

"การใช้เครื่องหมายทับสองครั้งนั้นสมเหตุสมผล แต่ฉันยังจำอย่างอื่นไม่ได้ในทันที ฉันต้องพึ่งคำใบ้ของคุณ"

"ค่อยๆ จำสิ่งที่ต้องการได้ ไม่ต้องกังวล และสำหรับสิ่งอื่นๆ ก็มี Google

การเข้ารหัส Unicode

"คุณรู้อยู่แล้วว่าอักขระแต่ละตัวที่แสดงบนหน้าจอสอดคล้องกับรหัสตัวเลขเฉพาะ ชุดรหัสมาตรฐานเหล่านี้เรียกว่าการเข้ารหัส

"กาลครั้งหนึ่งนานมาแล้ว เมื่อคอมพิวเตอร์ถูกประดิษฐ์ขึ้นใหม่ เจ็ดบิต (น้อยกว่าหนึ่งไบต์) ก็เพียงพอที่จะเข้ารหัสอักขระทุกตัว การเข้ารหัสครั้งแรกมีอักขระเพียง 128 ตัว การเข้ารหัสนี้เรียกว่าASCII "

"เป็นชื่อที่แปลกดี"

"ไม่มีอะไรแปลกเกี่ยวกับเรื่องนี้ มันเป็นตัวย่อASCIIย่อมาจาก American Standard Code for Information Interchange ซึ่งเป็นตารางรหัสอเมริกันมาตรฐานสำหรับอักขระที่พิมพ์ได้และรหัสพิเศษบางตัว"

"ประกอบด้วยอักขระควบคุมที่ไม่สามารถพิมพ์ได้ 33 ตัว (ซึ่งส่งผลต่อวิธีประมวลผลข้อความและช่องว่าง) และอักขระที่พิมพ์ได้ 95 ตัว รวมถึงตัวเลข ตัวอักษรละตินตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และเครื่องหมายวรรคตอนหลายตัว

"ในขณะที่คอมพิวเตอร์ได้รับความนิยมมากขึ้น แต่ละประเทศก็เริ่มเผยแพร่การเข้ารหัสของตัวเอง โดยปกติแล้ว พวกเขาใช้ ASCII เป็นจุดเริ่มต้น และแทนที่อักขระ ASCII ที่ไม่ค่อยได้ใช้ด้วยสัญลักษณ์จากตัวอักษรที่เกี่ยวข้อง

"เมื่อเวลาผ่านไป มีความคิดเกิดขึ้น: สร้างการเข้ารหัสเดียวที่มีอักขระทั้งหมดของการเข้ารหัสทั้งหมดในโลก

การเข้ารหัส Unicode

"ดังนั้น ในปี 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

รหัส เอาต์พุตคอนโซล
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: จุดรหัส

"640 กิโลไบต์ควรจะเพียงพอสำหรับทุกคนหรือไม่" บิล เกตส์ เคยกล่าวไว้ว่า หรือไม่. อย่างน้อยคำพูดนี้ก็มาจากเขา”

"ฮ่าฮ่า 640 กิโลไบต์ยังไม่เพียงพอที่จะโหลดสมองของหุ่นยนต์ทำความสะอาด"

"ชีวิตช่างยากลำบาก และเมื่อเวลาผ่านไป การเข้ารหัส UTF-16 เริ่มไม่เพียงพอ ปรากฎว่ามีภาษาเอเชียจำนวนมาก และมีสัญลักษณ์มากมาย และสัญลักษณ์เหล่านี้ไม่สามารถยัดเยียดเป็น 2 ไบต์ได้ "

"ดังนั้นสิ่งที่เราจะทำ?"

"ใช้ไบต์มากขึ้น ! แต่ประเภทถ่านมีเพียง 2 ไบต์และการเปลี่ยนเป็น 4 นั้นไม่ใช่เรื่องง่าย: มีการเขียนโค้ด Java หลายพันล้านบรรทัดทั่วโลก ซึ่งจะเสียหายหากประเภทถ่านกลายเป็น 4 ไบต์ใน Java machine. เราจึงเปลี่ยนประเภทถ่านไม่ได้!

"มีอีกแนวทางหนึ่ง จำไว้ว่าเราหลีกหนีอักขระด้วยการใส่แบ็กสแลชข้างหน้าพวกมันอย่างไร โดยพื้นฐานแล้ว เราเข้ารหัสอักขระตัวเดียวโดยใช้อักขระหลายตัว ผู้สร้าง Java ตัดสินใจใช้วิธีเดียวกัน

"อักขระบางตัวที่ปรากฏเป็นภาพเดียวจะถูกเข้ารหัสเป็น 2 chars ในสตริง:

รหัส เอาต์พุตคอนโซล
System.out.println("\uD83D\uDD0A");
🔊

"ตอนนี้โปรแกรม Java ของคุณสามารถส่งออกอิโมจิไปยังคอนโซลได้แล้ว 😎"

"ฉันจะใช้มันเพื่อความสนุกสนานอย่างแน่นอน!"