ปัญหา: สตริงแบบ PascalCase/CamelCase เช่น "WelcomeToMyWebsite" ต้องการแปลงเป็น "Welcome To My Website"
วิธีที่ 1: LINQ (กระชับ)
using System.Linq;
string str = "WelcomeToMyWebsite";
string spaced = string.Concat(str.Select(c => char.IsUpper(c) ? " " + c : c.ToString())).TrimStart();
// ผลลัพธ์: "Welcome To My Website"
วิธีที่ 2: Regex (ทรงพลังกว่า)
using System.Text.RegularExpressions;
string str = "WelcomeToMyWebsite";
string spaced = Regex.Replace(str, @"(?
วิธีที่ 3: Loop แบบ Manual (เข้าใจง่าย ประสิทธิ์ดี)
string AddSpaces(string input) {
if (string.IsNullOrEmpty(input)) return input;
var sb = new System.Text.StringBuilder(input.Length * 2);
sb.Append(input[0]);
for (int i = 1; i < input.Length; i++) {
if (char.IsUpper(input[i])) {
sb.Append(' ');
}
sb.Append(input[i]);
}
return sb.ToString();
}
ตัวอย่างครบถ้วน
using System;
using System.Linq;
using System.Text.RegularExpressions;
class Demo {
static void Main() {
string str = "WelcomeToMyWebsite";
Console.WriteLine("Original: " + str);
// LINQ
string linqResult = string.Concat(str.Select(c => char.IsUpper(c) ? " " + c : c.ToString())).TrimStart();
Console.WriteLine("LINQ: " + linqResult);
// Regex
string regexResult = Regex.Replace(str, @"(?
เปรียบเทียบ
| วิธี | ข้อดี | ข้อเสีย |
|---|---|---|
| LINQ | กระชับ One-liner | Allocate มาก (string.Concat + Select + ToString ตัวละคร) |
| Regex | จัดการ Edge Cases ได้ดี (Acronyms, Numbers) | ช้ากว่า, ต้องเข้าใจ Regex |
| Manual Loop | เร็วที่สุด, ควบคุม Logic ได้เต็มที่ | โค้ดยาวกว่า |
Regex ขั้นสูง: จัดการ Acronyms (XMLHttpRequest → XML Http Request)
// แทรก Space ก่อน Uppercase ที่ตามด้วย Lowercase (Boundary ของคำ)
string result = Regex.Replace(input, @"(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z][a-z])", " $1$2");