เมธอด String.ToCharArray() ใน C# ใช้คัดลอกตัวอักษรในสตริงเป็นอาเรย์ Unicode character (char array)
ไวยากรณ์ (Syntax)
public char[] ToCharArray(); public char[] ToCharArray(int startIndex, int length);
- startIndex — ตำแหน่งเริ่มต้นของ substring (zero-based)
- length — ความยาวของ substring ที่จะคัดลอก
- คืนค่า
char[]ใหม่ที่มีตัวอักษรที่คัดลอกมา
ตัวอย่างที่ 1: แปลงสตริงทั้งหมดเป็น char array
using System;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "Notebook";
string str2 = "Ultrabook";
char[] arr1 = str1.ToCharArray();
char[] arr2 = str2.ToCharArray();
Console.WriteLine("String1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String1 Substring from index 4 = " + str1.Substring(4, 4));
Console.Write("Character array... String1 = ");
for (int i = 0; i < arr1.Length; i++)
Console.Write(" " + arr1[i]);
Console.WriteLine("\n\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring from index 2 = " + str2.Substring(0, 5));
Console.Write("Character array... String2 = ");
for (int i = 0; i < arr2.Length; i++)
Console.Write(" " + arr2[i]);
}
}
ผลลัพธ์
String1 = Notebook String1 ToUpperInvariant = NOTEBOOK String1 Substring from index 4 = book Character array... String1 = N o t e b o o k String2 = Ultrabook String2 ToLowerInvariant = ultrabook String2 Substring from index 2 = Ultra Character array... String2 = U l t r a b o o k
ตัวอย่างที่ 2: แปลง substring เป็น char array (ระบุ startIndex และ length)
using System;
public class Demo
{
public static void Main(string[] args)
{
string str1 = "Welcome!";
string str2 = "Thisisit!";
char[] arr1 = str1.ToCharArray(3, 2); // เริ่ม index 3, ยาว 2 -> "co"
char[] arr2 = str2.ToCharArray(2, 2); // เริ่ม index 2, ยาว 2 -> "is"
Console.WriteLine("String1 = " + str1);
Console.WriteLine("String1 ToUpperInvariant = " + str1.ToUpperInvariant());
Console.WriteLine("String1 Substring from index 4 = " + str1.Substring(4, 4));
Console.Write("Character array... String1 = ");
for (int i = 0; i < arr1.Length; i++)
Console.Write(" " + arr1[i]);
Console.WriteLine("\n\nString2 = " + str2);
Console.WriteLine("String2 ToLowerInvariant = " + str2.ToLowerInvariant());
Console.WriteLine("String2 Substring from index 2 = " + str2.Substring(0, 5));
Console.Write("Character array... String2 = ");
for (int i = 0; i < arr2.Length; i++)
Console.Write(" " + arr2[i]);
}
}
ผลลัพธ์
String1 = Welcome! String1 ToUpperInvariant = WELCOME! String1 Substring from index 4 = ome! Character array... String1 = c o String2 = Thisisit! String2 ToLowerInvariant = thisisit! String2 Substring from index 2 = Thisi Character array... String2 = i s
สรุป
ToCharArray()คืนchar[]ใหม่ — เป็น deep copy ของตัวอักษรในสตริง- อ버โหลดไม่มีพารามิเตอร์: คัดลอกสตริงทั้งหมด
- Overload มีพารามิเตอร์: คัดลอก substring ที่ระบุ (
startIndex,length) - แตกต่างจาก
CopyTo()ที่ต้องสร้างอาเรย์ปลายทางเอง — ToCharArray() สร้างและคืนอาเรย์ใหม่ให้เลย - ใช้เมื่อต้องการ: วนลูปตัวอักษร, จัดการตัวอักษรแต่ละตัว, interop กับ API ที่รับ char[]
- สำหรับ performance ควรพิจารณา
string.AsSpan()(NET Core 2.1+/NET 5+) — ไม่ allocate array ใหม่
ตัวอย่างเพิ่มเติม: วนลูป char array และ LINQ
string s = "Hello World";
char[] chars = s.ToCharArray();
// วนลูป
foreach (char c in chars) Console.Write(c + " ");
// LINK กับ char array
var vowels = chars.Where(c => "aeiouAEIOU".Contains(c)).ToArray();
Console.WriteLine("\nVowels: " + new string(vowels)); // eo o