プログラミングの芽

面白そうな技術を使って、楽しいことやりたい

【C#】元の文字列と同じ長さで文字列置換を行う

C#には文字列を置換するReplaceメソッドがあります。
通常は

置換後の文字列 = 置換前の文字列.Replace( "置換したい文字列", "置換後の文字列");

といった感じで記述します。

この中で、例えば簡単な匿名化処理として
「私の名前は山田です。」の"山田"を置き換えたいと思うのですが、ここで山田は2文字なので2文字の(例えば)"■■"で置き換えたいという事もあると思います。

一々、置換したい文字列のLengthを取ってfor文で文字列を作成するのも良いですが、できれば1行で済ませたいですよね。
以下のような1行で可能になります。

置換後の文字列 = 置換前の文字列.Replace( "置換したい文字列", String.Join("区切り文字", Enumerable.Repeat("置換後の文字列", 置換したい文字列.Length).ToArray()));

Enumerable.Repeatメソッドは、第一引数の文字列を第二引数分繰り返した配列を返すメソッドになります。
ただ、このままではEnumerable型になってしまうので、ToArray()でArray型にした後、String.JoinメソッドでString型に連結しています。

以下プログラム例です

string sentence = "私の名前は山田です。";
string word = "山田";

string sentence_replace = sentence.Replace( word, String.Join( "", Enumerable.Repeat( "■", word.Length).ToArray() ) );

sentence_replace : "私の名前は■■です。"