C#のReplace完全ガイド|文字列置換・削除・効かない原因をサンプルで解説
はじめに
C#で文字列の一部を書き換えたいときに使用するのが、String.Replaceメソッドです。指定した文字列を別の文字列へ置換するだけでなく、不要な文字や空白、改行を削除する用途にも利用できます。
Replaceはシンプルなメソッドですが、次のような点でつまずくことがあります。
元の文字列が書き換わると思っている
大文字と小文字の違いによって置換されない
1文字を削除しようとしてコンパイルエラーになる
スペースは削除できても、タブや改行が残ってしまう
この記事では、C#のReplaceの基本構文から文字列の置換・削除方法まで、コピーして試せるサンプルコードを使って解説します。
1. C#のReplaceとは?文字列を置換する基本
1-1. String.Replaceメソッドの役割
C#のReplaceは、文字列の中にある指定した文字列または文字を、別の内容へ置き換えるためのメソッドです。
たとえば、次の文字列があるとします。
C#string message = "今日は晴れです。";
「晴れ」を「雨」に置換すると、次の文字列を作成できます。
今日は雨です。
このような文字列置換を行うのがString.Replaceメソッドです。
Replaceは、文字列を表すstring型、正確にはSystem.Stringクラスに用意されています。そのため、次のように置換対象となる文字列に続けて呼び出します。
C#文字列.Replace(置換前の値, 置換後の値)
なお、C#の文字列は変更できない「イミュータブル」なオブジェクトです。Replaceを実行しても、元の文字列そのものは変更されません。置換後の内容を持つ新しい文字列が返されます。
1-2. Replaceの基本構文と戻り値
C#のReplaceには、主に文字列を置換する形式と、1文字を置換する形式があります。
文字列を別の文字列へ置換する基本構文は次のとおりです。
C#string 置換後の文字列 = 元の文字列.Replace(
"置換対象の文字列",
"新しい文字列"
);
1文字を別の1文字へ置換する場合は、次の構文を使用します。
C#string 置換後の文字列 = 元の文字列.Replace(
'置換対象の文字',
'新しい文字'
);
ダブルクォーテーションで囲んだ値は文字列を表すstring型、シングルクォーテーションで囲んだ値は1文字を表すchar型です。
C#string text = "apple";
string result = text.Replace("app", "pineapp");
Console.WriteLine(result);
実行結果は次のとおりです。
pineapple
注意したいのは、Replaceの戻り値を受け取る必要があることです。次のコードでは、置換結果が変数に代入されていません。
C#string text = "Hello C#";
text.Replace("C#", "World");
Console.WriteLine(text);
実行結果は置換前のままです。
Hello C#
元の変数に置換結果を反映したい場合は、戻り値を代入します。
C#string text = "Hello C#";
text = text.Replace("C#", "World");
Console.WriteLine(text);
実行結果は次のとおりです。
Hello World
Replaceが効かないように見える場合は、まず戻り値を変数へ代入しているか確認しましょう。
1-3. 文字列を別の文字列に置換するサンプル
複数の文字からなる文字列を置換する場合は、Replace(string, string)を使用します。
C#string text = "C#は難しい言語です。";
string result = text.Replace("難しい", "学びやすい");
Console.WriteLine(result);
実行結果は次のとおりです。
C#は学びやすい言語です。
URLやファイルパスの一部を置換することもできます。
C#string url = "http://example.com/products";
string secureUrl = url.Replace("http://", "https://");
Console.WriteLine(secureUrl);
実行結果は次のとおりです。
https://example.com/products
複数種類の文字列を置換したい場合は、Replaceを連続して呼び出せます。
C#string text = "商品Aは1000円です。";
string result = text
.Replace("商品A", "商品B")
.Replace("1000円", "1500円");
Console.WriteLine(result);
実行結果は次のとおりです。
商品Bは1500円です。
ただし、置換する順番によって結果が変わる場合があります。
C#string text = "abc";
string result = text
.Replace("a", "b")
.Replace("b", "c");
Console.WriteLine(result);
実行結果は次のとおりです。
ccc
最初の置換によってaがbになり、その後、元から存在したbと置換によって作られたbの両方がcへ置き換えられるためです。
また、通常のReplaceでは大文字と小文字が区別されます。
C#string text = "C# c# C#";
string result = text.Replace("C#", "Java");
Console.WriteLine(result);
実行結果は次のとおりです。
Java c# Java
小文字のc#は、置換対象のC#と一致しないため残ります。Replaceが効かない場合は、置換対象の大文字・小文字、全角・半角、前後のスペースなどが一致しているか確認してください。
1-4. 1文字だけを置換するサンプル
1文字を別の1文字へ置換する場合は、Replace(char, char)を使用できます。
C#string text = "2026/06/20";
string result = text.Replace('/', '-');
Console.WriteLine(result);
実行結果は次のとおりです。
2026-06-20
char型の値は、シングルクォーテーションで囲みます。
C#string text = "A,B,C";
string result = text.Replace(',', '|');
Console.WriteLine(result);
実行結果は次のとおりです。
A|B|C
次のようにダブルクォーテーションを使用することもできますが、この場合はchar型ではなくstring型の置換処理になります。
C#string text = "A,B,C";
string result = text.Replace(",", "|");
どちらも同じ結果になります。1文字から1文字への置換であることを明確にしたい場合は、char型を使用すると意図が伝わりやすくなります。
なお、char型を使って1文字を削除することはできません。空の文字を表すchar型は存在しないためです。
次のようなコードはコンパイルエラーになります。
C#// 空のcharは指定できない
string result = text.Replace(',', '');
1文字を削除する場合は、対象を文字列として指定し、空文字列へ置換します。
C#string result = text.Replace(",", "");
1-5. Replaceは一致するすべての箇所を置換する
C#のReplaceは、最初に見つかった1箇所だけではなく、一致するすべての箇所を置換します。
C#string text = "赤い花、赤い車、赤い服";
string result = text.Replace("赤い", "青い");
Console.WriteLine(result);
実行結果は次のとおりです。
青い花、青い車、青い服
文字を置換する場合も同様です。
C#string text = "banana";
string result = text.Replace('a', 'o');
Console.WriteLine(result);
実行結果は次のとおりです。
bonono
Replaceには、置換する回数を指定する引数はありません。そのため、「最初の1箇所だけ置換したい」「2箇所目だけ置換したい」といった処理には、IndexOfやRemove、Insertなどを組み合わせる必要があります。
また、置換対象が存在しない場合、例外は発生しません。内容が変わっていない文字列が返されます。
C#string text = "Hello";
string result = text.Replace("C#", "Java");
Console.WriteLine(result);
実行結果は次のとおりです。
Hello
Replaceが効かないと感じた場合、次の点を確認すると原因を見つけやすくなります。
置換対象の文字列が実際に含まれているか
大文字と小文字が一致しているか
全角文字と半角文字を間違えていないか
前後にスペースや改行が含まれていないか
Replaceの戻り値を変数に代入しているか
2. C#のReplaceで文字列や文字を削除する方法
2-1. 空文字列に置換して指定文字列を削除する
C#のReplaceを使って文字列を削除したい場合は、削除対象を空文字列へ置換します。
空文字列は、""またはstring.Emptyで表せます。
C#string text = "C#プログラミング入門";
string result = text.Replace("入門", "");
Console.WriteLine(result);
実行結果は次のとおりです。
C#プログラミング
string.Emptyを使用しても結果は同じです。
C#string text = "税込価格:1,100円";
string result = text.Replace("税込価格:", string.Empty);
Console.WriteLine(result);
実行結果は次のとおりです。
1,100円
一致する文字列が複数ある場合は、すべて削除されます。
C#string text = "テスト仮テスト仮テスト";
string result = text.Replace("仮", "");
Console.WriteLine(result);
実行結果は次のとおりです。
テストテストテスト
複数の文字列を削除する場合は、Replaceを連続して呼び出せます。
C#string text = "[重要] C# Replace 入門";
string result = text
.Replace("[", "")
.Replace("]", "")
.Replace("入門", "");
Console.WriteLine(result);
実行結果は次のとおりです。
重要 C# Replace
この例では末尾にスペースが残ります。不要な前後の空白も削除したい場合は、Trimを組み合わせます。
C#string text = "[重要] C# Replace 入門";
string result = text
.Replace("[", "")
.Replace("]", "")
.Replace("入門", "")
.Trim();
Console.WriteLine(result);
実行結果は次のとおりです。
重要 C# Replace
2-2. 特定の1文字を削除する
特定の1文字を削除する場合も、その文字を空文字列へ置換します。
C#string price = "1,234,567円";
string result = price.Replace(",", "");
Console.WriteLine(result);
実行結果は次のとおりです。
1234567円
電話番号からハイフンを削除することもできます。
C#string phoneNumber = "090-1234-5678";
string result = phoneNumber.Replace("-", "");
Console.WriteLine(result);
実行結果は次のとおりです。
09012345678
削除対象が1文字であっても、空文字列へ置換するときは文字列型として指定します。
C#string text = "A-B-C";
// 正しい書き方
string result = text.Replace("-", "");
Replace(char, char)は1文字を別の1文字へ置換するメソッドであり、削除には使用できません。
C#// 1文字を別の1文字へ置換
string replaced = text.Replace('-', '/');
// 1文字を削除
string removed = text.Replace("-", "");
実行結果は次のようになります。
A/B/C
A-B-C → ABC
複数種類の記号を削除する場合は、Replaceをつなげて記述できます。
C#string text = "(03)-1234-5678";
string result = text
.Replace("(", "")
.Replace(")", "")
.Replace("-", "");
Console.WriteLine(result);
実行結果は次のとおりです。
0312345678
ただし、削除対象となる文字の種類が多い場合や、「数字以外をすべて削除する」といった条件で処理したい場合は、Replaceを大量に並べるよりも正規表現やLINQを利用したほうが適しています。
2-3. スペースや改行、タブを削除する
文字列に含まれる半角スペースを削除する場合は、半角スペースを空文字列へ置換します。
C#string text = "C# Replace サンプル";
string result = text.Replace(" ", "");
Console.WriteLine(result);
実行結果は次のとおりです。
C#Replaceサンプル
全角スペースは半角スペースとは別の文字です。半角スペースと全角スペースの両方を削除する場合は、それぞれ置換します。
C#string text = "C# Replace サンプル";
string result = text
.Replace(" ", "")
.Replace(" ", "");
Console.WriteLine(result);
実行結果は次のとおりです。
C#Replaceサンプル
前後のスペースだけを削除したい場合は、ReplaceではなくTrimが適しています。
C#string text = " C# Replace ";
string result = text.Trim();
Console.WriteLine(result);
実行結果は次のとおりです。
C# Replace
Trimは文字列の先頭と末尾にある空白を削除します。文字列の途中にある空白は残ります。
改行を削除する場合は、改行コードを空文字列へ置換します。Windowsでは一般的に\r\n、Linuxなどでは\nが使われます。
複数の環境で生成された文字列を処理する場合は、\rと\nをそれぞれ削除すると確実です。
C#string text = "1行目\r\n2行目\n3行目";
string result = text
.Replace("\r", "")
.Replace("\n", "");
Console.WriteLine(result);
実行結果は次のとおりです。
1行目2行目3行目
現在の実行環境で使用される改行コードだけを削除する場合は、Environment.NewLineも使用できます。
C#string text = $"1行目{Environment.NewLine}2行目";
string result = text.Replace(Environment.NewLine, "");
Console.WriteLine(result);
改行を完全に削除すると、前後の単語が連結されることがあります。その場合は、空文字列ではなくスペースへ置換します。
C#string text = "C#のReplaceを\r\n詳しく解説します。";
string result = text
.Replace("\r\n", " ")
.Replace("\r", " ")
.Replace("\n", " ");
Console.WriteLine(result);
実行結果は次のとおりです。
C#のReplaceを 詳しく解説します。
タブ文字を削除する場合は、\tを空文字列へ置換します。
C#string text = "名前\t年齢\t住所";
string result = text.Replace("\t", "");
Console.WriteLine(result);
実行結果は次のとおりです。
名前年齢住所
タブ区切りのデータを見やすく整形したい場合は、タブをスペースやカンマへ置換できます。
C#string text = "山田\t30\t東京";
string result = text.Replace("\t", ",");
Console.WriteLine(result);
実行結果は次のとおりです。
山田,30,東京
半角スペース、全角スペース、改行、タブをまとめて削除するサンプルは次のとおりです。
C#string text = " C#\tReplace の\r\nサンプル ";
string result = text
.Replace(" ", "")
.Replace(" ", "")
.Replace("\t", "")
.Replace("\r", "")
.Replace("\n", "");
Console.WriteLine(result);
実行結果は次のとおりです。
C#Replaceのサンプル
ただし、すべての空白文字を削除すると文章が読みにくくなることがあります。データの用途に応じて、削除するのか、半角スペースへ統一するのかを判断しましょう。
まとめ
C#のReplaceを使うと、文字列や文字を簡単に別の内容へ置換できます。
文字列を置換する基本的な書き方は次のとおりです。
C#string result = text.Replace("置換前", "置換後");
1文字を別の1文字へ置換する場合は、char型を使用できます。
C#string result = text.Replace('-', '/');
文字列や文字を削除したい場合は、空文字列へ置換します。
C#string result = text.Replace("削除対象", "");
Replaceは一致するすべての箇所を置換します。また、元の文字列は変更されず、置換後の新しい文字列が戻り値として返されます。
そのため、置換結果を利用するには、次のように戻り値を変数へ代入することが重要です。
C#text = text.Replace("C#", ".NET");
Replaceが効かない場合は、戻り値の代入、大文字と小文字、全角と半角、スペースや改行の有無を確認しましょう。基本的な動作を理解すれば、文章の整形、記号の削除、URLやファイルパスの変換など、さまざまな文字列処理に活用できます。

