【C#】文字列の空白を除去するTrim, TrimStart, TrimEndの正しい使い方

目次

文字列前後の「空白」問題

ユーザー入力、ファイル読み込み、APIレスポンスなど、外部から取得した文字列データには、意図しない空白文字(スペース、タブ、改行など)が先頭や末尾に含まれていることがよくあります。

例: " Data Received \r\n"

これらの空白文字を放置したまま==演算子で比較を行ったり、データベースに保存しようとすると、"Data Received"との比較がfalseになったり、データの一貫性が失われたりする原因となります。

C#では、これらの不要な空白文字を簡単かつ安全に除去するために、TrimTrimStartTrimEndという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が両端を処理するのに対し、TrimStartTrimEndは片側だけを処理します。

  • 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配列の文字を両端から除去します。

これらのメソッドは、予期せぬ空白による比較の失敗を防ぎ、データの品質を保つために不可欠なツールです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次