Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ความแตกต่างระหว่าง Trim() และ TrimStart() ใน C#

ความแตกต่างระหว่าง 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()หน้า + ท้ายWhitespaceTrim(params char[])
TrimStart()หน้า (Left)WhitespaceTrimStart(params char[])
TrimEnd()ท้าย (Right)WhitespaceTrimEnd(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 InputTrim()" john " → "john"
ลบ Leading ZerosTrimStart('0')"000123" → "123"
ลบ File ExtensionTrimEnd()"file.txt" → TrimEnd(".txt".ToCharArray()) → "file"
ลบ Prefix/Suffix เฉพาะTrimStart/TrimEnd (string)"ERROR: msg" → TrimStart("ERROR: ")
Parsing CSV/LogTrim()ทำความสะอาดแต่ละ 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