C#のTrimStartとは?先頭の空白・指定文字を削除する使い方とつまずきやすい注意点
はじめに
C#で文字列の先頭にある空白や特定の文字を削除したいときに使うのが、TrimStartメソッドです。
たとえば、ユーザーが入力した文字列の先頭に余分なスペースが入っていたり、商品コードや数値文字列の先頭に不要な0が付いていたりするケースがあります。
C#string text = " Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
TrimStartは便利なメソッドですが、「文字列の途中は削除されない」「指定した文字列そのものを削除するメソッドではない」「戻り値を代入しないと反映されない」など、初心者がつまずきやすいポイントもあります。
この記事では、C#のTrimStartの基本的な使い方から、指定文字の削除、TrimやTrimEndとの違い、接頭辞を削除したい場合の書き方まで、サンプルコード付きで解説します。
1. C#のTrimStartとは?文字列の先頭だけを削除するメソッド
TrimStartは、文字列の先頭にある不要な文字を削除するためのメソッドです。
「先頭の空白を削除したい」「先頭の0を消したい」「先頭の記号だけを取り除きたい」といった場面で使います。
1-1. TrimStartでできること:先頭の空白や指定文字を取り除く
TrimStartでは、主に次の2つの使い方があります。
C#// 先頭の空白文字を削除
string result1 = text.TrimStart();
// 先頭の指定文字を削除
string result2 = text.TrimStart('0');
引数なしで呼び出すと、先頭の空白文字が削除されます。
C#string text = " C#";
string result = text.TrimStart();
Console.WriteLine(result); // C#
引数に文字を指定すると、その文字が先頭に連続している間だけ削除されます。
C#string text = "000123";
string result = text.TrimStart('0');
Console.WriteLine(result); // 123
1-2. 削除されるのは「先頭に連続している文字」だけ
TrimStartで削除されるのは、文字列の先頭に連続している対象文字だけです。
C#string text = "000123000";
string result = text.TrimStart('0');
Console.WriteLine(result); // 123000
この例では、先頭の000は削除されますが、末尾の000は残ります。
また、文字列の途中にある対象文字も削除されません。
C#string text = "001020";
string result = text.TrimStart('0');
Console.WriteLine(result); // 1020
途中にある0はそのまま残ります。
1-3. 元の文字列は変更されず、新しい文字列が返る
C#のstringは不変、つまり一度作成された文字列そのものは変更されません。
そのため、TrimStartを呼び出しても、元の変数の中身が直接書き換わるわけではありません。
C#string text = " Hello";
text.TrimStart();
Console.WriteLine(text); // Hello
削除結果を使いたい場合は、戻り値を変数に代入する必要があります。
C#string text = " Hello";
text = text.TrimStart();
Console.WriteLine(text); // Hello
この点は非常につまずきやすいので、必ず覚えておきましょう。
2. TrimStartの基本的な使い方
まずは、引数なしのTrimStart()から確認します。
引数なしのTrimStart()は、文字列の先頭にある空白文字を削除します。
2-1. 引数なしで先頭の空白文字を削除する
基本的な書き方は次のとおりです。
C#string result = 対象文字列.TrimStart();
サンプルコードです。
C#string text = " Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
先頭にあった半角スペースが削除され、Helloだけが残ります。
ただし、削除されるのは先頭だけです。
C#string text = " Hello ";
string result = text.TrimStart();
Console.WriteLine($"[{result}]"); // [Hello ]
末尾のスペースは残ります。
2-2. 半角スペース・タブ・改行などが削除対象になる
引数なしのTrimStart()では、半角スペースだけでなく、タブや改行などの空白文字も削除対象になります。
C#string text = "\t\n Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
この例では、先頭にあるタブ、改行、半角スペースがまとめて削除されます。
代表的な空白文字には、次のようなものがあります。
| 文字 | 意味 |
|---|---|
' ' | 半角スペース |
'\t' | タブ |
'\r' | キャリッジリターン |
'\n' | 改行 |
ログファイルやCSVなどの文字列を整形するときにもよく使います。
2-3. 実行前後の文字列を比較して動きを確認する
TrimStartの動きを確認するときは、文字列の前後を[]などで囲むとわかりやすいです。
C#string text = " C# ";
string result = text.TrimStart();
Console.WriteLine($"Before: [{text}]");
Console.WriteLine($"After : [{result}]");
実行結果は次のようになります。
Before: [ C# ]
After : [C# ]
先頭の空白だけが削除され、末尾の空白は残っていることが確認できます。
3. TrimStartで指定した文字を削除する方法
TrimStartでは、空白だけでなく、指定した文字を削除することもできます。
先頭の0や、先頭のスラッシュ、ハイフンなどを取り除きたいときに便利です。
3-1. 1文字を指定して削除する書き方
1文字を指定する場合は、次のように書きます。
C#string text = "000123";
string result = text.TrimStart('0');
Console.WriteLine(result); // 123
文字はダブルクォーテーションではなく、シングルクォーテーションで指定します。
C#'0' // char
"0" // string
TrimStartで指定するのは基本的にcharです。
そのため、次のような書き方はできません。
C#// コンパイルエラー
// string result = text.TrimStart("0");
"0"は文字列であり、'0'は1文字を表すcharです。
3-2. 複数の文字を指定して削除する書き方
複数の文字を削除対象にしたい場合は、次のように複数のcharを指定します。
C#string text = "---///Hello";
string result = text.TrimStart('-', '/');
Console.WriteLine(result); // Hello
この例では、先頭にある-と/が削除対象になります。
先頭に-または/が連続している間は、順番に関係なく削除されます。
C#string text = "/-/-Hello";
string result = text.TrimStart('-', '/');
Console.WriteLine(result); // Hello
3-3. char配列やparamsを使った指定方法
TrimStartには、char配列を渡すこともできます。
C#string text = "***---Hello";
char[] trimChars = { '*', '-' };
string result = text.TrimStart(trimChars);
Console.WriteLine(result); // Hello
また、C#ではparamsにより、次のように直接複数の文字を渡すこともできます。
C#string text = "***---Hello";
string result = text.TrimStart('*', '-');
Console.WriteLine(result); // Hello
どちらの書き方でも、削除対象となる文字は同じです。
複数の箇所で同じ削除対象を使い回すならchar[]、その場だけで使うなら直接指定する書き方がわかりやすいです。
3-4. 指定文字の順番は削除結果に影響しない
TrimStartに複数の文字を指定した場合、指定した順番は削除結果に影響しません。
C#string text = "abcHello";
string result1 = text.TrimStart('a', 'b', 'c');
string result2 = text.TrimStart('c', 'b', 'a');
Console.WriteLine(result1); // Hello
Console.WriteLine(result2); // Hello
TrimStart('a', 'b', 'c')は、「先頭にa、b、cのいずれかがある間、それらを削除する」という意味です。
つまり、"abc"という文字列を削除するという意味ではありません。
ここは非常に誤解しやすいポイントです。
C#string text = "cabHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
"cab"という順番でも、c、a、bがすべて削除対象なので、結果はHelloになります。
4. TrimStartでよく使う実践例
ここからは、実際によく使うTrimStartの例を紹介します。
4-1. 先頭の0を削除する
数値のような文字列で、先頭の0を取り除きたい場合があります。
C#string code = "00012345";
string result = code.TrimStart('0');
Console.WriteLine(result); // 12345
ただし、すべてが0の文字列に対して実行すると、空文字になります。
C#string code = "0000";
string result = code.TrimStart('0');
Console.WriteLine(result); // 空文字
空文字になった場合に"0"として扱いたいなら、次のように書けます。
C#string code = "0000";
string result = code.TrimStart('0');
if (result == "")
{
result = "0";
}
Console.WriteLine(result); // 0
より短く書くなら、次のようにもできます。
C#string code = "0000";
string result = code.TrimStart('0');
result = result == "" ? "0" : result;
Console.WriteLine(result); // 0
4-2. 先頭のスラッシュやハイフンを削除する
URLのパスやコード値などで、先頭のスラッシュやハイフンを削除したい場合にも使えます。
C#string path = "///users/list";
string result = path.TrimStart('/');
Console.WriteLine(result); // users/list
複数の記号を削除したい場合は、まとめて指定します。
C#string text = "---///data";
string result = text.TrimStart('-', '/');
Console.WriteLine(result); // data
この場合、先頭にある-と/がすべて削除されます。
4-3. CSVやログ文字列の余分な先頭文字を整形する
CSVやログの処理では、先頭に不要な区切り文字や空白が入ることがあります。
C#string line = ",,,apple,banana,orange";
string result = line.TrimStart(',');
Console.WriteLine(result); // apple,banana,orange
ログ文字列の先頭に余分な空白や記号が入っている場合も整形できます。
C#string log = " [INFO] Application started";
string result = log.TrimStart();
Console.WriteLine(result); // [INFO] Application started
複数の不要文字を取り除くこともできます。
C#string log = " -- [ERROR] File not found";
string result = log.TrimStart(' ', '-');
Console.WriteLine(result); // [ERROR] File not found
4-4. ユーザー入力値の先頭スペースを整える
ユーザー入力では、意図せず先頭にスペースが入ることがあります。
C#string input = " yamada@example.com";
string result = input.TrimStart();
Console.WriteLine(result); // yamada@example.com
ただし、入力値の前後両方の空白を取り除きたい場合は、TrimStartではなくTrimを使うほうが自然です。
C#string input = " yamada@example.com ";
string result = input.Trim();
Console.WriteLine(result); // yamada@example.com
先頭だけ整えたいのか、末尾も含めて整えたいのかによって使い分けましょう。
5. TrimStartとTrim・TrimEndの違い
C#には、TrimStartのほかにTrimとTrimEndがあります。
それぞれ削除する位置が異なります。
5-1. TrimStartは先頭だけを削除する
TrimStartは、文字列の先頭だけを対象にします。
C#string text = " Hello ";
string result = text.TrimStart();
Console.WriteLine($"[{result}]"); // [Hello ]
末尾の空白は削除されません。
5-2. TrimEndは末尾だけを削除する
TrimEndは、文字列の末尾だけを対象にします。
C#string text = " Hello ";
string result = text.TrimEnd();
Console.WriteLine($"[{result}]"); // [ Hello]
先頭の空白は削除されません。
指定文字を末尾から削除することもできます。
C#string text = "Hello!!!";
string result = text.TrimEnd('!');
Console.WriteLine(result); // Hello
5-3. Trimは先頭と末尾の両方を削除する
Trimは、文字列の先頭と末尾の両方を対象にします。
C#string text = " Hello ";
string result = text.Trim();
Console.WriteLine($"[{result}]"); // [Hello]
文字列の前後をまとめて整形したい場合は、Trimを使うのが一般的です。
ただし、文字列の途中にある空白は削除されません。
C#string text = " Hello C# ";
string result = text.Trim();
Console.WriteLine(result); // Hello C#
5-4. 目的別の使い分け早見表
| 目的 | 使うメソッド |
|---|---|
| 先頭の空白だけ削除したい | TrimStart() |
| 末尾の空白だけ削除したい | TrimEnd() |
| 先頭と末尾の空白を削除したい | Trim() |
| 先頭の指定文字だけ削除したい | TrimStart('文字') |
| 末尾の指定文字だけ削除したい | TrimEnd('文字') |
| 先頭と末尾の指定文字を削除したい | Trim('文字') |
サンプルで比較すると、違いがよくわかります。
C#string text = " Hello ";
Console.WriteLine($"[{text.TrimStart()}]"); // [Hello ]
Console.WriteLine($"[{text.TrimEnd()}]"); // [ Hello]
Console.WriteLine($"[{text.Trim()}]"); // [Hello]
6. TrimStartでつまずきやすい注意点
TrimStartはシンプルなメソッドですが、誤解しやすいポイントがあります。
特に、指定文字の扱いと戻り値には注意が必要です。
6-1. 文字列の途中や末尾の文字は削除されない
TrimStartは、名前のとおり先頭だけを処理します。
C#string text = "abc---abc";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // ---abc
後ろのabcは削除されません。
また、途中にある対象文字も削除されません。
C#string text = "aaHelloaa";
string result = text.TrimStart('a');
Console.WriteLine(result); // Helloaa
文字列全体から特定の文字を削除したい場合は、Replaceなど別の方法を使います。
C#string text = "aaHelloaa";
string result = text.Replace("a", "");
Console.WriteLine(result); // Hello
6-2. 指定した文字列そのものを削除するメソッドではない
TrimStartで複数の文字を指定すると、「その文字列を削除する」のではなく、「指定した各文字を削除対象にする」という意味になります。
C#string text = "abcabcHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
これは"abc"という接頭辞を2回削除したというより、先頭にa、b、cのいずれかが続いている間、すべて削除した結果です。
そのため、次のような文字列でも削除されます。
C#string text = "cbaHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
"abc"という文字列そのものを削除したい場合は、StartsWithなどを使う必要があります。
6-3. nullの文字列に対して呼び出すと例外になる
TrimStartはインスタンスメソッドなので、nullに対して呼び出すと例外になります。
C#string text = null;
// NullReferenceException
string result = text.TrimStart();
nullの可能性がある場合は、事前にチェックしましょう。
C#string text = null;
string result = text == null ? null : text.TrimStart();
Console.WriteLine(result); // null
または、null条件演算子を使って次のように書けます。
C#string text = null;
string result = text?.TrimStart();
Console.WriteLine(result); // null
空文字にしたい場合は、null合体演算子を組み合わせます。
C#string text = null;
string result = text?.TrimStart() ?? "";
Console.WriteLine(result); // 空文字
6-4. 全角スペースの扱いに注意する
引数なしのTrimStart()では、多くの空白文字が削除対象になります。
C#string text = " Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
この例の先頭は全角スペースです。
ただし、半角スペースだけを指定した場合、全角スペースは削除されません。
C#string text = " Hello";
string result = text.TrimStart(' ');
Console.WriteLine(result); // Hello
' 'は半角スペースであり、' 'は全角スペースです。
全角スペースも明示的に削除対象にしたい場合は、次のように指定します。
C#string text = " Hello";
string result = text.TrimStart(' ', ' ');
Console.WriteLine(result); // Hello
見た目が似ているため、ソースコード上では区別しにくい点に注意しましょう。
6-5. 戻り値を代入しないと削除結果が反映されない
TrimStartは、削除後の新しい文字列を返します。
元の文字列は変更されません。
C#string text = " Hello";
text.TrimStart();
Console.WriteLine(text); // Hello
このコードでは、TrimStartの結果を受け取っていないため、textは変わっていません。
正しくは次のように書きます。
C#string text = " Hello";
text = text.TrimStart();
Console.WriteLine(text); // Hello
これはTrimStartに限らず、Trim、TrimEnd、Replace、Substringなどでも同じです。
C#string text = "Hello";
text.Replace("H", "J");
Console.WriteLine(text); // Hello
結果を使いたい場合は、必ず戻り値を代入しましょう。
C#string text = "Hello";
text = text.Replace("H", "J");
Console.WriteLine(text); // Jello
7. TrimStartで文字列ではなく「接頭辞」を削除したい場合
TrimStartは、先頭の文字を削除するメソッドです。
一方で、「先頭が"abc"なら、その"abc"だけを削除したい」というケースもあります。
この場合、TrimStartではなく、StartsWithやSubstring、Removeを使います。
7-1. TrimStart("abc")のように書けない理由
次のようなコードは書けません。
C#string text = "abcHello";
// コンパイルエラー
// string result = text.TrimStart("abc");
TrimStartは文字列ではなく、文字を指定するメソッドだからです。
似たように見える次のコードは動きます。
C#string text = "abcHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
しかし、これは"abc"という文字列を削除しているわけではありません。
a、b、cのいずれかが先頭にある間、削除しているだけです。
C#string text = "cbaHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
"abc"という順番でなくても削除されるため、接頭辞削除の用途には向いていません。
7-2. StartsWithとSubstringを使って先頭文字列を削除する
接頭辞を削除したい場合は、StartsWithで先頭が一致するか確認し、Substringで残りの部分を取り出します。
C#string text = "abcHello";
string prefix = "abc";
string result = text;
if (text.StartsWith(prefix))
{
result = text.Substring(prefix.Length);
}
Console.WriteLine(result); // Hello
この方法なら、先頭が"abc"の場合だけ削除できます。
C#string text = "cbaHello";
string prefix = "abc";
string result = text;
if (text.StartsWith(prefix))
{
result = text.Substring(prefix.Length);
}
Console.WriteLine(result); // cbaHello
"cbaHello"は"abc"で始まっていないため、削除されません。
7-3. Removeを使って指定した長さ分だけ削除する
Removeを使って、先頭から指定した長さ分を削除することもできます。
C#string text = "abcHello";
string prefix = "abc";
string result = text;
if (text.StartsWith(prefix))
{
result = text.Remove(0, prefix.Length);
}
Console.WriteLine(result); // Hello
Remove(0, prefix.Length)は、「0文字目からprefix.Length文字分を削除する」という意味です。
Substringを使うかRemoveを使うかは好みですが、接頭辞を削除する意図はRemoveのほうが伝わりやすい場合もあります。
7-4. Replaceとの違いと誤用しやすいケース
接頭辞を削除したいときに、Replaceを使ってしまうケースがあります。
C#string text = "abcHelloabc";
string result = text.Replace("abc", "");
Console.WriteLine(result); // Hello
この例では、先頭だけでなく末尾のabcも削除されます。
接頭辞だけを削除したい場合、Replaceは適していません。
C#string text = "abcHelloabc";
string prefix = "abc";
string result = text;
if (text.StartsWith(prefix))
{
result = text.Substring(prefix.Length);
}
Console.WriteLine(result); // Helloabc
先頭のabcだけを削除したいなら、StartsWithで確認してからSubstringまたはRemoveを使いましょう。
8. TrimStartのサンプルコード集
ここでは、よく使うTrimStartのサンプルをまとめます。
8-1. 先頭の空白を削除するサンプル
C#string text = " Hello C#";
string result = text.TrimStart();
Console.WriteLine(result); // Hello C#
タブや改行を含む場合も削除できます。
C#string text = "\t\n Hello C#";
string result = text.TrimStart();
Console.WriteLine(result); // Hello C#
前後の違いを確認するなら、次のように書くとわかりやすいです。
C#string text = " Hello C#";
Console.WriteLine($"Before: [{text}]");
Console.WriteLine($"After : [{text.TrimStart()}]");
実行結果です。
Before: [ Hello C#]
After : [Hello C#]
8-2. 先頭の0を削除するサンプル
C#string number = "000123";
string result = number.TrimStart('0');
Console.WriteLine(result); // 123
すべて0の場合に0を残したい場合は、次のようにします。
C#string number = "0000";
string result = number.TrimStart('0');
if (result == "")
{
result = "0";
}
Console.WriteLine(result); // 0
メソッド化すると使い回しやすくなります。
C#static string TrimLeadingZeros(string value)
{
string result = value.TrimStart('0');
return result == "" ? "0" : result;
}
Console.WriteLine(TrimLeadingZeros("000123")); // 123
Console.WriteLine(TrimLeadingZeros("0000")); // 0
8-3. 先頭の複数記号を削除するサンプル
C#string text = "---///***Hello";
string result = text.TrimStart('-', '/', '*');
Console.WriteLine(result); // Hello
char配列で指定することもできます。
C#string text = "---///***Hello";
char[] trimChars = { '-', '/', '*' };
string result = text.TrimStart(trimChars);
Console.WriteLine(result); // Hello
ログ文字列の整形例です。
C#string log = " -- [INFO] Started";
string result = log.TrimStart(' ', '-');
Console.WriteLine(result); // [INFO] Started
8-4. nullや空文字を考慮した安全なサンプル
nullの可能性がある場合は、そのままTrimStartを呼び出すと例外になります。
安全に処理したい場合は、次のように書けます。
C#string text = null;
string result = text?.TrimStart();
Console.WriteLine(result); // null
nullを空文字として扱いたい場合は、次のようにします。
C#string text = null;
string result = text?.TrimStart() ?? "";
Console.WriteLine(result); // 空文字
空文字や空白だけの文字列も考慮する例です。
C#static string SafeTrimStart(string value)
{
return value?.TrimStart() ?? "";
}
Console.WriteLine(SafeTrimStart(" Hello")); // Hello
Console.WriteLine(SafeTrimStart("")); // 空文字
Console.WriteLine(SafeTrimStart(null)); // 空文字
先頭の0を削除しつつ、nullや空文字も考慮するなら次のように書けます。
C#static string TrimLeadingZerosSafe(string value)
{
if (string.IsNullOrEmpty(value))
{
return "";
}
string result = value.TrimStart('0');
return result == "" ? "0" : result;
}
Console.WriteLine(TrimLeadingZerosSafe("000123")); // 123
Console.WriteLine(TrimLeadingZerosSafe("0000")); // 0
Console.WriteLine(TrimLeadingZerosSafe("")); // 空文字
Console.WriteLine(TrimLeadingZerosSafe(null)); // 空文字
9. TrimStartに関するよくある質問
最後に、TrimStartに関するよくある疑問をまとめます。
9-1. TrimStartは文字列の途中の空白も消せる?
TrimStartでは、文字列の途中の空白は削除できません。
C#string text = " Hello C#";
string result = text.TrimStart();
Console.WriteLine(result); // Hello C#
先頭の空白だけが削除され、HelloとC#の間にある空白は残ります。
文字列の中の空白をすべて削除したい場合は、Replaceを使います。
C#string text = " Hello C#";
string result = text.Replace(" ", "");
Console.WriteLine(result); // HelloC#
連続する空白を1つにまとめたい場合は、正規表現を使う方法もあります。
C#using System.Text.RegularExpressions;
string text = "Hello C#";
string result = Regex.Replace(text, @"\s+", " ");
Console.WriteLine(result); // Hello C#
9-2. TrimStartで全角スペースは削除できる?
引数なしのTrimStart()であれば、全角スペースも削除できます。
C#string text = " Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
ただし、半角スペースを指定した場合は、全角スペースは削除されません。
C#string text = " Hello";
string result = text.TrimStart(' ');
Console.WriteLine(result); // Hello
全角スペースも明示的に指定する場合は、次のようにします。
C#string text = " Hello";
string result = text.TrimStart(' ', ' ');
Console.WriteLine(result); // Hello
9-3. TrimStartで複数文字の単語を削除できる?
TrimStartは、複数文字の単語をそのまま削除するためのメソッドではありません。
次のような書き方はできません。
C#// コンパイルエラー
// string result = text.TrimStart("abc");
また、次のコードは"abc"という単語を削除しているわけではありません。
C#string text = "abcHello";
string result = text.TrimStart('a', 'b', 'c');
Console.WriteLine(result); // Hello
この場合は、a、b、cのいずれかが先頭に続いている間、削除されます。
単語や接頭辞を削除したい場合は、StartsWithを使いましょう。
C#string text = "abcHello";
string prefix = "abc";
if (text.StartsWith(prefix))
{
text = text.Substring(prefix.Length);
}
Console.WriteLine(text); // Hello
9-4. TrimStartと正規表現はどちらを使うべき?
単純に「先頭の空白を削除したい」「先頭の特定文字を削除したい」だけなら、TrimStartを使うのがおすすめです。
C#string text = " Hello";
string result = text.TrimStart();
先頭の0を削除する場合も、TrimStartで十分です。
C#string text = "000123";
string result = text.TrimStart('0');
一方で、複雑な条件で削除したい場合は、正規表現が向いています。
たとえば、先頭の数字をすべて削除したい場合です。
C#using System.Text.RegularExpressions;
string text = "123abc456";
string result = Regex.Replace(text, @"^\d+", "");
Console.WriteLine(result); // abc456
TrimStartは「指定した文字の集合」を削除するのに向いています。
正規表現は「数字」「英字」「特定パターン」など、条件に基づいて削除したい場合に向いています。
基本的には、シンプルな処理ならTrimStart、複雑な条件なら正規表現と考えるとよいでしょう。
まとめ
TrimStartは、C#で文字列の先頭にある空白や指定文字を削除するためのメソッドです。
引数なしで使うと、先頭の空白文字を削除できます。
C#string text = " Hello";
string result = text.TrimStart();
Console.WriteLine(result); // Hello
文字を指定すると、先頭に連続する指定文字を削除できます。
C#string text = "000123";
string result = text.TrimStart('0');
Console.WriteLine(result); // 123
複数の文字を指定することもできます。
C#string text = "---///Hello";
string result = text.TrimStart('-', '/');
Console.WriteLine(result); // Hello
ただし、TrimStartで削除されるのは先頭に連続している文字だけです。文字列の途中や末尾は削除されません。
また、TrimStart('a', 'b', 'c')は"abc"という文字列を削除する意味ではなく、a、b、cのいずれかを先頭から削除するという意味です。
接頭辞としての文字列を削除したい場合は、StartsWithとSubstringまたはRemoveを使いましょう。
C#string text = "abcHello";
string prefix = "abc";
if (text.StartsWith(prefix))
{
text = text.Substring(prefix.Length);
}
Console.WriteLine(text); // Hello
そして、TrimStartの戻り値を代入しないと結果は反映されません。
C#string text = " Hello";
text = text.TrimStart();
TrimStart、TrimEnd、Trimの違いを理解して使い分けることで、文字列整形のコードをわかりやすく安全に書けるようになります。

