แบบฝึกหัด - ตรวจสอบพื้นฐานการจัดรูปแบบสตริง
- 20 นาที
ในหน่วยนี้ คุณจะได้เรียนรู้วิธีการจัดรูปแบบสตริงสําหรับการแสดงผลที่มีประสิทธิภาพ โดยเฉพาะอย่างยิ่งสําหรับกรณีที่ใช้ตัวแปรหลายตัว
เตรียมสภาพแวดล้อมการเข้ารหัสของคุณ
โมดูลนี้ประกอบด้วยกิจกรรมลงมือทําซึ่งจะแนะนําคุณตลอดกระบวนการสร้างและเรียกใช้รหัสการสาธิต คุณควรทํากิจกรรมเหล่านี้ให้เสร็จสมบูรณ์โดยใช้ Visual Studio Code เป็นสภาพแวดล้อมการพัฒนาของคุณ การใช้ Visual Studio Code สําหรับกิจกรรมเหล่านี้ช่วยให้คุณเขียนและเรียกใช้โค้ดในสภาพแวดล้อมของนักพัฒนาที่ใช้โดยผู้เชี่ยวชาญทั่วโลกได้อย่างสะดวกขึ้น
หมายเหตุ
หากคุณทําโมดูล Microsoft Learn อื่นเสร็จสมบูรณ์แล้วใน C# series นี้ คุณอาจสร้างโฟลเดอร์โครงการสําหรับตัวอย่างรหัสอยู่แล้ว ถ้าเป็นกรณีนี้ คุณสามารถข้ามส่วนต่อไปนี้ของขั้นตอน และลบโค้ดในไฟล์ Project.cs ที่ใช้สําหรับแบบฝึกหัดก่อนหน้านี้
เปิด Visual Studio Code คุณสามารถใช้เมนูเริ่มต้นของ Windows (หรือทรัพยากรที่เทียบเท่าสําหรับระบบปฏิบัติการอื่น) เพื่อเปิด Visual Studio Code
บนเมนู ไฟล์ รหัส Visual Studio เลือก เปิดโฟลเดอร์
ในกล่องโต้ตอบ เปิดโฟลเดอร์ ให้ไปยังโฟลเดอร์ Windows Desktop หากคุณมีตําแหน่งโฟลเดอร์อื่นที่คุณเก็บโครงการโค้ดไว้ คุณสามารถใช้ตําแหน่งโฟลเดอร์นั้นแทนได้ สําหรับการฝึกนี้ สิ่งสําคัญคือการมีตําแหน่งที่ตั้งที่ง่ายต่อการค้นหาและจดจํา
ในกล่องโต้ตอบ เปิด โฟลเดอร์ ให้เลือก เลือกโฟลเดอร์ ถ้าคุณเห็นกล่องโต้ตอบความปลอดภัยที่ถามว่าคุณเชื่อถือผู้เขียนหรือไม่ ให้เลือก ใช่
บนเมนู เทอร์มินัล Visual Studio Code ให้เลือก เทอร์มินัลใหม่ โปรดสังเกตว่าพร้อมท์คําสั่งในแผงเทอร์มินัล จะแสดงเส้นทางโฟลเดอร์สําหรับโฟลเดอร์ปัจจุบัน เช่น:
C:\Users\someuser\Desktop>ที่พรอมท์คําสั่งเทอร์มินัล หากต้องการสร้างแอปพลิเคชันคอนโซลใหม่ในโฟลเดอร์ที่ระบุ ให้พิมพ์ dotnet new console -o ./CsharpProjects/TestProject แล้วกด Enter คําสั่ง .NET CLI นี้ใช้เทมเพลตโปรแกรม .NET เพื่อสร้างโครงการแอปพลิเคชันคอนโซล C# ใหม่ในตําแหน่งที่ตั้งโฟลเดอร์ที่ระบุ คําสั่งจะสร้างโฟลเดอร์ CsharpProjects และ TestProject ให้คุณ และใช้ TestProject เป็นชื่อของไฟล์
.csprojในแผง EXPLORER ให้ขยายโฟลเดอร์ CsharpProjects คุณควรเห็นโฟลเดอร์ TestProject และแฟ้มสองแฟ้ม แฟ้มโปรแกรม C# ที่ชื่อว่า Program.cs และแฟ้มโครงการ C# ที่ชื่อว่า TestProject.csproj
ในแผง EXPLORER หากต้องการดูไฟล์โค้ดของคุณในแผง ตัวแก้ไข ให้เลือก Program.cs
ลบบรรทัดรหัสที่มีอยู่ คุณใช้โครงการคอนโซล C# นี้เพื่อสร้าง สร้าง และเรียกใช้ตัวอย่างโค้ดในระหว่างโมดูลนี้
ปิดแผงเทอร์มินัล
การจัดรูปแบบแบบรวมคืออะไร
การจัดรูปแบบแบบรวม ใช้ตัวแทนข้อความที่มีลําดับเลขภายในสตริง ในขณะทํางาน ทุกอย่างภายในวงเล็บปีกกาจะถูกแก้ไขเป็นค่าที่จะถูกส่งผ่านตามตําแหน่งด้วย
ตัวอย่างของการจัดรูปแบบแบบรวมนี้ใช้วิธีการ Format() ที่มีอยู่แล้วภายในสําหรับ string คําสําคัญชนิดข้อมูล อัปเดตโค้ดของคุณใน Visual Studio Code Editor ดังนี้:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
ถ้าคุณเรียกใช้โค้ดนี้ คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
Hello World!
มีบางสิ่งที่สําคัญที่ต้องสังเกตเกี่ยวกับโค้ดนี้
- ชนิดข้อมูลและตัวแปรของชนิดข้อมูลที่กําหนดมี "วิธีการของผู้ช่วยเหลือ" อยู่แล้วภายในเพื่อทําให้งานบางอย่างเป็นเรื่องง่าย
- สตริง
"{0} {1}!"สัญพจน์จะสร้างเทมเพลต ส่วนที่ถูกแทนที่ในเวลาที่เรียกใช้งาน - โทเค็น
{0}จะถูกแทนที่ด้วยอาร์กิวเมนต์แรกหลังจากเทมเพลตสตริงกล่าวอีกนัยหนึ่งคือค่าของตัวแปรfirst - โทเค็น
{1}จะถูกแทนที่ด้วยอาร์กิวเมนต์ที่สองหลังจากเทมเพลตสตริงกล่าวอีกนัยหนึ่งคือค่าของตัวแปรsecond
หมายเหตุ
คุณอาจคิดว่าเป็นเลขคี่ที่จะเริ่มต้นด้วยตัวเลข 0 ที่จริงแล้วนี่เป็นเรื่องธรรมดามากในการพัฒนาซอฟต์แวร์ เมื่อใดก็ตามที่มีลําดับของรายการที่สามารถระบุได้โดยใช้ตัวเลข
อัปเดตโค้ดของคุณดังต่อไปนี้:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);บันทึกไฟล์โค้ดของคุณ จากนั้นใช้ Visual Studio Code เพื่อเรียกใช้โค้ดของคุณ คุณควรเห็นผลลัพธ์ต่อไปนี้:
World Hello! Hello Hello Hello!
ข้อสังเกตบางอย่างเกี่ยวกับตัวอย่างเหล่านี้:
- สําหรับคําสั่งแรก
Console.WriteLine()ให้สังเกตว่าโทเค็นสามารถจัดเรียงตามลําดับได้ โค้ดตัวอย่างมี{1}มาก่อน{0} - สําหรับคําสั่งที่สอง
Console.WriteLine()ให้สังเกตว่าโทเค็นสามารถนํามาใช้ใหม่กับสามอินสแตนซ์ของ{0}นอกจากนี้ ยังไม่มีการใช้อาร์กิวเมนต์secondตัวแปรที่สอง แต่โค้ดยังคงทํางานโดยไม่มีข้อผิดพลาด
การแปลงสตริงคืออะไร
การประมาณค่าระหว่างสตริง เป็นเทคนิคที่ทําให้การจัดรูปแบบแบบรวมง่ายขึ้น
แทนที่จะใช้โทเค็นที่มีลําดับเลข และรวมถึงค่าสัญพจน์หรือชื่อตัวแปรในรายการอาร์กิวเมนต์ถึง String.Format() หรือ Console.WriteLine()คุณสามารถใช้ชื่อตัวแปรภายในวงเล็บปีกกาได้
เพื่อให้สตริงถูกแทรก คุณต้องใส่คํานําหน้าด้วย
$คําสั่ง ในตอนนี้ ให้สร้างตัวอย่างเดียวกันจากก่อนหน้านี้โดยใช้การแปลงสตริงแทนการจัดรูปแบบแบบรวม อัปเดตโค้ดของคุณดังต่อไปนี้:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");บันทึกไฟล์โค้ดของคุณ จากนั้นใช้ Visual Studio Code เพื่อเรียกใช้โค้ดของคุณ คุณควรเห็นผลลัพธ์ต่อไปนี้:
Hello World! World Hello! Hello Hello Hello!
หมายเหตุ
หากคุณดูตัวอย่างโค้ดในหนังสือและออนไลน์ คุณมีแนวโน้มที่จะเห็นทั้งการจัดรูปแบบแบบรวมและการใช้การประมาณค่าในช่วงสตริง แต่โดยทั่วไปแล้วคุณควรเลือกการใช้สตริงในการแปลงสตริง
จัดรูปแบบสกุลเงิน
การรวมการจัดรูปแบบแบบรวมและการแปลงสตริงสามารถใช้เพื่อจัดรูปแบบค่าสําหรับการแสดงผลที่ระบุภาษาและวัฒนธรรมได้ ในตัวอย่าง :C ต่อไปนี้ ตัวระบุรูปแบบสกุลเงินจะถูกใช้เพื่อแสดง price ตัวแปร และ discount เป็นสกุลเงิน อัปเดตโค้ดของคุณดังต่อไปนี้:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
หากคุณดําเนินการโค้ดนี้บนคอมพิวเตอร์ที่มีภาษาในการแสดงผลของ Windows ซึ่งตั้งค่าเป็น "อังกฤษ (สหรัฐอเมริกา)" คุณจะสังเกตเห็นการแสดงผลต่อไปนี้
Price: $123.45 (Save $50.00)
ให้สังเกตว่าการเพิ่ม :C ไปยังโทเค็นภายในวงเล็บปีกกาจะจัดรูปแบบตัวเลขเป็นสกุลเงินโดยไม่คํานึงถึงว่าคุณใช้ int หรือdecimal
หมายเหตุ
จะเกิดอะไรขึ้นถ้าประเทศ/ภูมิภาคและภาษาของคุณไม่ทราบ ถ้าคุณเรียกใช้โค้ดก่อนหน้าใน .NET Editor "ในเบราว์เซอร์" เช่น ที่ TrydotNet คุณจะเห็นผลลัพธ์ต่อไปนี้: Price: ¤123.45 (Save ¤50.00) ใช้สัญลักษณ์ ¤ แทนสัญลักษณ์สําหรับเงินของประเทศ/ภูมิภาคของคุณ นี่คือสัญลักษณ์ทั่วไปที่ใช้เพื่อแสดงถึง "สกุลเงิน" โดยไม่คํานึงถึง ชนิดของ สกุลเงิน คุณเห็นสัญลักษณ์นี้ใน .NET Editor เนื่องจากจะละเว้นตําแหน่งที่ตั้งปัจจุบันของคุณ
วิธีการที่ประเทศ/ภูมิภาคและภาษาของผู้ใช้มีผลต่อการจัดรูปแบบสตริง
จะเกิดอะไรขึ้นถ้าคุณใช้รหัสก่อนหน้านี้บนคอมพิวเตอร์ในประเทศฝรั่งเศสที่มี Windows Display Language ตั้งค่าเป็นภาษาฝรั่งเศส ในกรณีดังกล่าว คุณจะเห็นเอาต์พุตต่อไปนี้
Price: 123,45 € (Save 50,00 €)
เหตุผลสําหรับผลลัพธ์ "€" ก่อนหน้านี้คือคุณลักษณะการจัดรูปแบบสกุลเงินสตริงจะขึ้นอยู่กับการตั้งค่าคอมพิวเตอร์เฉพาะที่สําหรับวัฒนธรรม ในบริบทนี้ คําว่า "วัฒนธรรม" หมายถึงประเทศ/ภูมิภาคและภาษาของผู้ใช้ปลายทาง รหัสวัฒนธรรมเป็นสตริงอักขระห้าตัวที่คอมพิวเตอร์ใช้เพื่อระบุตําแหน่งที่ตั้งและภาษาของผู้ใช้ปลายทาง รหัสวัฒนธรรมช่วยให้มั่นใจได้ว่าข้อมูลบางอย่างเช่นวันที่และสกุลเงินสามารถแสดงได้อย่างถูกต้อง
เช่น:
- รหัสวัฒนธรรมของลําโพงภาษาอังกฤษในสหรัฐอเมริกาคือ
en-US - รหัสวัฒนธรรมของลําโพงภาษาฝรั่งเศสในฝรั่งเศสคือ
fr-FR - รหัสวัฒนธรรมของลําโพงภาษาฝรั่งเศสในแคนาดาคือ
fr-CA
วัฒนธรรมมีผลต่อระบบการเขียน ปฏิทินที่ใช้ ลําดับการจัดเรียงของสตริง และการจัดรูปแบบสําหรับวันที่และตัวเลข (เช่น การจัดรูปแบบสกุลเงิน)
น่าเสียดายที่การตรวจสอบให้แน่ใจว่ารหัสของคุณทํางานได้อย่างถูกต้องในคอมพิวเตอร์ทุกเครื่องโดยไม่คํานึงถึงประเทศ/ภูมิภาคหรือภาษาของผู้ใช้ปลายทางเป็นเรื่องท้าทาย กระบวนการนี้เรียกว่า การแปลเป็นภาษาท้องถิ่น (หรือ ทั่วโลก) การแปลเป็นภาษาท้องถิ่นขึ้นอยู่กับปัจจัยมากมายที่ไม่ได้กล่าวถึงในโมดูลนี้ แต่เพียงแค่ไวยากรณ์การจัดรูปแบบสตริงอาจใช้รูปแบบที่แตกต่างกันโดยขึ้นอยู่กับวัฒนธรรมของผู้ใช้
การจัดรูปแบบตัวเลข
เมื่อทํางานกับข้อมูลตัวเลข คุณอาจต้องการจัดรูปแบบตัวเลขสําหรับความสามารถในการอ่านโดยรวมเครื่องหมายจุลภาคเพื่อกําหนดความซับซ้อนเป็นพัน ล้าน พันล้าน พันล้าน และอื่น ๆ
Nตัวระบุรูปแบบตัวเลขทําให้ตัวเลขอ่านได้ง่ายขึ้น อัปเดตโค้ดของคุณดังต่อไปนี้:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
หากคุณกําลังดูสิ่งนี้จาก en-US วัฒนธรรม คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
Measurement: 123,456.79 units
ตาม N ค่าเริ่มต้น ตัวระบุรูปแบบตัวเลขจะแสดงเพียงสองหลักเท่านั้นหลังจากจุดทศนิยม
หากคุณต้องการแสดงความแม่นยํามากขึ้น คุณสามารถทําได้โดยการเพิ่มตัวเลขหลังตัวระบุ โค้ดต่อไปนี้จะแสดงตัวเลขสี่หลักหลังจุดทศนิยมโดยใช้ตัว N4 ระบุ อัปเดตโค้ดของคุณดังต่อไปนี้:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
หากคุณกําลังดูสิ่งนี้จาก en-US วัฒนธรรม คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
Measurement: 123,456.7891 units
การจัดรูปแบบเปอร์เซ็นต์
Pใช้ตัวระบุรูปแบบเพื่อจัดรูปแบบเปอร์เซ็นต์และปัดเศษเป็นทศนิยม 2 ตําแหน่ง เพิ่มตัวเลขหลังจากนั้นเพื่อควบคุมจํานวนของค่าที่แสดงหลังจุดทศนิยม อัปเดตโค้ดของคุณดังต่อไปนี้:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
หากคุณกําลังดูสิ่งนี้จาก en-US วัฒนธรรม คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
Tax rate: 36.79%
การรวมวิธีการจัดรูปแบบ
ตัวแปรสตริงสามารถจัดเก็บสตริงที่สร้างขึ้นโดยใช้เทคนิคการจัดรูปแบบ ในตัวอย่างต่อไปนี้ ผลลัพธ์ทางคณิตศาสตร์ทศนิยมและทศนิยมถูกจัดรูปแบบและจัดเก็บใน yourDiscount สตริงโดยใช้การจัดรูปแบบแบบรวม
อัปเดตโค้ดของคุณดังต่อไปนี้
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
หากคุณกําลังดูสิ่งนี้จาก en-US วัฒนธรรม คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
You saved $7.56 off the regular $67.55 price.
คุณสามารถรวมสตริงที่จัดรูปแบบหลายรายการได้ สร้างบนรหัสก่อนหน้านี้ที่เชื่อมเปอร์เซ็นต์ที่คํานวณเข้าด้วยกันโดยใช้การประมาณค่าจากสตริงแทนการต่อสตริงโดยการyourDiscount += $"A discount of {(price - salePrice)/price:P2}!";แทรกลงในรหัสบนบรรทัดก่อนหน้าConsole.WriteLine()
หมายเหตุ
คุณไม่จําเป็นต้องใช้ String.Format() กับวิธีการประมาณค่าจากสตริงนี้
อัปเดตโค้ดของคุณดังต่อไปนี้
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
หากคุณกําลังดูหน่วยนี้จาก en-US วัฒนธรรม คุณจะสังเกตเห็นเอาต์พุตต่อไปนี้
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
สรุป
ต่อไปนี้คือประเด็นสําคัญที่สุดจากหน่วยนี้เกี่ยวกับการจัดรูปแบบสตริง:
- คุณสามารถใช้การรวมการจัดรูปแบบหรือการรวมสตริงเพื่อจัดรูปแบบสตริง
- ด้วยการจัดรูปแบบแบบรวม คุณใช้แม่แบบสตริงที่ประกอบด้วยโทเค็นการแทนที่อย่างน้อยหนึ่งรายการในแบบฟอร์ม
{0}คุณยังใส่รายการอาร์กิวเมนต์ที่จับคู่กับโทเค็นแทนที่ตามลําดับได้อีกด้วย การจัดรูปแบบแบบรวมทํางานเมื่อใช้string.Format()หรือConsole.WriteLine() - ด้วยการ ประมาณค่าในช่วงสตริง คุณใช้เทมเพลตสตริงที่มีชื่อตัวแปรที่คุณต้องการแทนที่ล้อมรอบด้วยวงเล็บปีกกา ใช้คําสั่ง
$ก่อนเทมเพลตสตริงเพื่อระบุว่าคุณต้องการประมาณค่าจากข้อมูลประมาณค่าจากข้อมูลแบบแทรก - จัดรูปแบบสกุลเงินโดยใช้
:Cตัวระบุ - จัดรูปแบบตัวเลขโดยใช้ตัว
:Nระบุ ควบคุมความแม่นยํา (จํานวนค่าหลังจากจุดทศนิยม) โดยใช้ตัวเลขตามหลัง:Nเช่น{myNumber:N3} - จัดรูปแบบเปอร์เซ็นต์โดยใช้ตัว
:Pระบุรูปแบบ - การจัดรูปแบบสกุลเงินและตัวเลขขึ้นอยู่กับวัฒนธรรมของผู้ใช้ปลายทาง โค้ดอักขระห้าตัวที่มีประเทศ/ภูมิภาคและภาษาของผู้ใช้ (ตามการตั้งค่าบนคอมพิวเตอร์ของผู้ใช้)