文字列前後の「空白」問題
ユーザー入力、ファイル読み込み、APIレスポンスなど、外部から取得した文字列データには、意図しない空白文字(スペース、タブ、改行など)が先頭や末尾に含まれていることがよくあります。
例: " Data Received \r\n"
これらの空白文字を放置したまま==演算子で比較を行ったり、データベースに保存しようとすると、"Data Received"との比較がfalseになったり、データの一貫性が失われたりする原因となります。
C#では、これらの不要な空白文字を簡単かつ安全に除去するために、Trim、TrimStart、TrimEndという3つのメソッドがstringクラスに用意されています。
Trim() メソッド (両端の空白を除去)
Trim()メソッドは、文字列の先頭(左側)と末尾(右側)の両方から、すべての空白文字を除去した新しい文字列を返します。
ここでいう「空白文字」とは、半角スペース()だけでなく、タブ(\t)、改行(\r, \n)、およびその他のUnicodeで空白と定義される文字も含まれます。
Trim() のコード例
using System;
public class TrimExample
{
public static void Main()
{
// 先頭にタブ、末尾にスペースと改行が含まれる文字列
string rawInput = "\t Hello C# World \r\n";
// 両端の空白をすべて除去
string trimmedString = rawInput.Trim();
Console.WriteLine($"元の文字列: '[{rawInput}]'");
Console.WriteLine($"Trim後: '[{trimmedString}]'");
}
}
出力結果:
元の文字列: '[ Hello C# World
]'
Trim後: '[Hello C# World]'
文字列の内部(C#とWorldの間)のスペースは除去されない点に注意してください。
TrimStart() と TrimEnd()
Trimが両端を処理するのに対し、TrimStartとTrimEndは片側だけを処理します。
TrimStart(): 文字列の**先頭(左側)**の空白のみを除去します。TrimEnd(): 文字列の**末尾(右側)**の空白のみを除去します。
コード例 (Trim / TrimStart / TrimEnd の比較)
using System;
public class TrimComparison
{
public static void Main()
{
string messyString = " === Report === \n";
Console.WriteLine($"元の文字列: '[{messyString}]'");
// 両端を除去
string resultTrim = messyString.Trim();
Console.WriteLine($"Trim(): '[{resultTrim}]'");
// 先頭のみ除去 (末尾の \n は残る)
string resultTrimStart = messyString.TrimStart();
Console.WriteLine($"TrimStart(): '[{resultTrimStart}]'");
// 末尾のみ除去 (先頭のスペースは残る)
string resultTrimEnd = messyString.TrimEnd();
Console.WriteLine($"TrimEnd(): '[{resultTrimEnd}]'");
}
}
出力結果:
元の文字列: '[ === Report ===
]'
Trim(): '[=== Report ===]'
TrimStart(): '[=== Report ===
]'
TrimEnd(): '[ === Report ===]'
応用: Trim(char[]) (指定した文字の除去)
Trim(およびTrimStart, TrimEnd)メソッドは、引数を指定しない場合は「空白文字」を除去しますが、引数としてchar型の配列(char[])を渡すことで、空白文字ではなく、指定した文字セットを両端から除去できます。
これは、不要な装飾記号などを取り除くのに便利です。
Trim(char[]) のコード例
文字列の前後にある $、*、(スペース)を除去したい場合の例です。
using System;
public class TrimCharsExample
{
public static void Main()
{
// 除去したい文字のリスト
char[] charsToRemove = { '$', '*', ' ' };
string productCode = " ***$SKU-123$*** ";
// charsToRemove に含まれる文字を両端からすべて除去
string cleanCode = productCode.Trim(charsToRemove);
Console.WriteLine($"元のコード: '[{productCode}]'");
Console.WriteLine($"Trim(char[])後: '[{cleanCode}]'");
}
}
出力結果:
元のコード: '[ ***$SKU-123$*** ]'
Trim(char[])後: '[SKU-123]'
Trimは、指定した文字セットのいずれかが続く限り、両端から除去し続けます。SKU-123のハイフン(-)は除去対象の配列に含まれていないため、そこで停止します。
まとめ
string.Trim()メソッドは、ユーザー入力のサニタイズ(無害化)やデータ整形の第一歩として非常に重要です。
Trim(): 文字列の両端からすべての空白文字を除去します。TrimStart(): 先頭の空白のみを除去します。TrimEnd(): 末尾の空白のみを除去します。Trim(char[]): 空白文字の代わりに、指定したchar配列の文字を両端から除去します。
これらのメソッドは、予期せぬ空白による比較の失敗を防ぎ、データの品質を保つために不可欠なツールです。
