ความแตกต่างระหว่าง Trim(), TrimStart(), TrimEnd() ใน C#
ทั้งสามเป็นเมธอดของ string สำหรับลบอักขระที่ไม่ต้องการ ต่างกันที่ **ตำแหน่งที่ลบ**
Trim() - ลบทั้งหน้าและท้าย
- ลบ Whitespace characters (Space, Tab, Newline, Unicode whitespace) **ทั้งหน้าและท้าย**
- Overload:
Trim(params char[]) - ลบอักขระที่ระบุทั้งหน้าและท้าย
string s = " Hello World \t\n";
Console.WriteLine($"'{s.Trim()}'"); // 'Hello World'
string s2 = "***Hello***";
Console.WriteLine(s2.Trim('*')); // "Hello" (ลบ * ทั้งหน้าและท้าย)
TrimStart() - ลบหน้า (Leading) เท่านั้น
- ลบอักขระนำหน้าที่ระบุ (หรือ Whitespace default)
- เก็บท้ายไว้ตามเดิม
string s = " Hello World ";
Console.WriteLine($"'{s.TrimStart()}'"); // 'Hello World '
string s2 = "000123";
Console.WriteLine(s2.TrimStart('0')); // "123"
// ลบหลายตัวอักษร
string s3 = "abcHello";
Console.WriteLine(s3.TrimStart('a','b','c')); // "Hello"
TrimEnd() - ลบท้าย (Trailing) เท่านั้น
- ลบอักขระท้ายที่ระบุ (หรือ Whitespace default)
- เก็บหน้าไว้ตามเดิม
string s = " Hello World ";
Console.WriteLine($"'{s.TrimEnd()}'"); // ' Hello World'
string s2 = "123000";
Console.WriteLine(s2.TrimEnd('0')); // "123"
string s3 = "Helloxyz";
Console.WriteLine(s3.TrimEnd('x','y','z')); // "Hello"
ตารางเปรียบเทียบ
| เมธอด | ลบที่ | Default (ไม่ระบุ char[]) | Overload |
Trim() | หน้า + ท้าย | Whitespace | Trim(params char[]) |
TrimStart() | หน้า (Left) | Whitespace | TrimStart(params char[]) |
TrimEnd() | ท้าย (Right) | Whitespace | TrimEnd(params char[]) |
C# 11 / .NET 7+: String overloads
// ตั้งแต่ .NET 7 รองรับ String argument (ไม่ใช่แค่ char[])
string s = "abcHelloWorldabc";
Console.WriteLine(s.TrimStart("abc")); // "HelloWorldabc" - ลบ "abc" ที่หน้า
Console.WriteLine(s.TrimEnd("abc")); // "abcHelloWorld" - ลบ "abc" ที่ท้าย
Console.WriteLine(s.Trim("abc")); // "HelloWorld" - ลบ "abc" ทั้งสองข้าง
กรณีใช้งานจริง
| สถานการณ์ | เมธอดที่เหมาะ | ตัวอย่าง |
| ทำความสะอาด User Input | Trim() | " john " → "john" |
| ลบ Leading Zeros | TrimStart('0') | "000123" → "123" |
| ลบ File Extension | TrimEnd() | "file.txt" → TrimEnd(".txt".ToCharArray()) → "file" |
| ลบ Prefix/Suffix เฉพาะ | TrimStart/TrimEnd (string) | "ERROR: msg" → TrimStart("ERROR: ") |
| Parsing CSV/Log | Trim() | ทำความสะอาดแต่ละ field |
Performance Note
- สร้าง String ใหม่ทุกครั้ง (String Immutable)
- สำหรับ High-performance: ใช้
MemoryExtensions.Trim กับ Span<char> / ReadOnlySpan<char>
- หลีกเลี่ยงเรียกซ้ำในลูป ใช้ตัวแปรกลาง
// High-perf (C# 11+)
ReadOnlySpan span = " hello ".AsSpan();
var trimmed = span.Trim(); // ReadOnlySpan - ไม่ allocate string
string result = trimmed.ToString(); // allocate ครั้งเดียวตอนต้องการ string