文字列から特定の文字列を取り除くには?[C#/VB]:.NET TIPS
StringクラスのReplaceメソッドを使って、文字列から特定の文字列(部分文字列)を取り除く方法を解説する。
本稿は2007/11/15に初版公開した記事を改訂し、Visual Studio 2017でのコードの動作検証、図版の追加、全般的な構成の変更などを行ったものです。
.NET FrameworkのクラスライブラリのStringクラス(System名前空間)には、文字列から特定の文字列を取り除くためのメソッドは用意されていない(※位置を指定して部分文字列を取り除くためのRemoveメソッドは存在する。「条件が複雑なとき」のサンプルコードを参照のこと)。そのため、このような処理を実現するためには、Replaceメソッドで代用することが一般的だ。
特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。
Replaceメソッドの使い方
Replaceメソッドは、文字列内の「特定の文字列」を「別の文字列」に置き換えるためのもので、第1パラメーターに置き換え前の文字列(=特定の文字列)、第2パラメーターに置き換え後の文字列(=別の文字列)を指定する。置換後の結果を戻り値として返す。
つまり、第1パラメーターに「特定の文字列」を、第2パラメーターに「空文字」(=「""」や「String.Empty」)を指定してReplaceメソッドを呼び出すことで、「特定の文字列」が「空文字」に置き換えられ、結果的に特定の文字列を取り除くことができる。
サンプルプログラム
例えば、「あいうえお」という文字列から「うえ」という特定の文字列を取り除きたい場合には、次のようにReplaceメソッドを呼び出せばよい。
// 冒頭に「using System;」が必要
string before = "あいうえお";
string after = before.Replace("うえ", "");
Console.WriteLine(after);
// 出力:あいお
Dim before As String = "あいうえお"
Dim after As String = before.Replace("うえ", "")
Console.WriteLine(after)
' 出力:あいお
コンソールアプリとして実装した例。
これを実行すると、「あいうえお」から「うえ」が取り除かれた「あいお」という出力が得られる。
なお、本TIPSでは「特定の文字列」を固定で指定しているが、これをRegexクラス(System.Text.RegularExpressions名前空間)を使って正規表現により動的に指定する方法が「TIPS:正規表現を使って文字列から部分文字列を取り除くには?」で紹介されている。
条件が複雑なとき
取り除きたい文字列を指定する条件が複雑なときは、その文字列を検索して位置を見つけ出してから、Removeメソッドを使って削除する。複数条件(複数の条件にマッチした部分文字列のみを削除する)や位置指定(ある位置以降/以前でマッチした部分文字列のみを削除する)、あるいは、最初/最後にマッチした部分文字列だけを削除したいといったような場合だ。
例として、最初に一致した文字列だけを削除する例を示す(次のコード)。
// 冒頭に「using System;」が必要
const string TARGET = "うえ";
string before = "あいうえおうえいおあ";
// Replaceメソッドでは、該当した箇所の全てを置換してしまう
string after = before.Replace(TARGET, "");
Console.WriteLine(after);
// 出力:あいおいおあ
// 該当した最初の箇所だけを削除する例
int idx = before.IndexOf(TARGET);
if (idx >= 0)
after = before.Remove(idx, TARGET.Length);
Console.WriteLine(after);
// 出力:あいおうえいおあ
Const TARGET As String = "うえ"
Dim before As String = "あいうえおうえいおあ"
' Replaceメソッドでは、該当した箇所の全てを置換してしまう
Dim after As String = before.Replace(TARGET, "")
Console.WriteLine(after)
' 出力:あいおいおあ
' 該当した最初の箇所だけを削除する例
Dim idx As Integer = before.IndexOf(TARGET)
If (idx >= 0) Then
after = before.Remove(idx, TARGET.Length)
End If
Console.WriteLine(after)
' 出力:あいおうえいおあ
カテゴリ:クラスライブラリ 処理対象:文字列
使用ライブラリ:Stringクラス(System名前空間)
関連TIPS:正規表現を使って文字列から部分文字列を取り除くには?
更新履歴
【2018/09/19】Visual Studio 2017でのコードの動作検証、図版の追加、全般的な構成の変更などを行いました。
【2007/11/15】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.