ここでは、文字列の任意の位置に別の文字列を挿入する方法を幾つか紹介します。
String型の文字列に別の文字列を挿入するには、String.Insertメソッドを使います。String.Insertメソッドを使うと、指定した位置に指定した文字列を挿入できます。
String.Insertメソッドは、挿入された結果の文字列を返します。基の文字列は変更しません。
以下にString.Insertメソッドを使った例を示します。
Dim s As String = "0123456789" '5文字目の後(インデックスが5の位置)に文字列を挿入する Dim s1 As String = s.Insert(5, "-") 's1 は "01234-56789" となる 's は "0123456789" のまま
string s = "0123456789"; //5文字目の後(インデックスが5の位置)に文字列を挿入する string s1 = s.Insert(5, "-"); //s1 は "01234-56789" となる //s は "0123456789" のまま
なお文字列の先頭や末尾に文字列を挿入するときは、String.Insertメソッドを使わずに、連結演算子を使って文字列を連結したほうが良いです。このことは、「C# Insert String Method」で指摘されています。
StringBuilderの場合も、StringBuilder.Insertメソッドで文字列を挿入できます。StringBuilder.InsertはString.Insertと違い、StringBuilderオブジェクトの内容が変更されます。
StringBuilder.Insertメソッドを使った例を以下に示します。
Dim s As String = "0123456789" 'StringBuilderオブジェクトを作成する Dim sb As New System.Text.StringBuilder(s) '5文字目の後(インデックスが5の位置)に文字列を挿入する sb.Insert(5, "-") '「01234-56789」となる '7文字目の後に文字列を2回挿入する sb.Insert(7, "/", 2) '「01234-5//6789」となる 'StringBuilderを文字列に変換する Dim s1 As String = sb.ToString()
string s = "0123456789"; //StringBuilderオブジェクトを作成する System.Text.StringBuilder sb = new System.Text.StringBuilder(s); //5文字目の後(インデックスが5の位置)に文字列を挿入する sb.Insert(5, "-"); //「01234-56789」となる //7文字目の後に文字列を2回挿入する sb.Insert(7, "/", 2); //「01234-5//6789」となる //StringBuilderを文字列に変換する string s1 = sb.ToString();
String.InsertとStringBuilder.Insertの使い分けは、「文字列処理を高速に行う」で説明しているように、同じ文字列に対して複数回挿入を行う場合はStringBuilder.Insertメソッドを使うというのが一般的な考え方です。
具体的に何回挿入を繰り返すときにStringBuilder.Insertを使った方が良いかに関しては、「StringBuilder vs. String / Fast String Operations with .NET 2.0」が参考になります。これによると、2回以上挿入する場合はString.InsertよりStringBuilder.Insertの方が速くなるということです。
ある文字列の直前、あるいは直後に文字列を挿入したい場合は、文字列の置換によって行う方法があります。なお文字列を置換する方法については、「文字列を置換する」で説明しています。
以下に、文字列の置換によって文字列を挿入する例を示します。
Dim s As String = "明日もいい天気でしょう。" '「明日も」の後に「あさっても」を挿入する Dim s1 As String = s.Replace("明日も", "明日もあさっても") '明日もあさってもいい天気でしょう。 '「いい天気」の前に「きっと」を挿入する Dim s2 As String = s.Replace("いい天気", "きっといい天気") '明日もきっといい天気でしょう。
string s = "明日もいい天気でしょう。"; //「明日も」の後に「あさっても」を挿入する string s1 = s.Replace("明日も", "明日もあさっても"); //明日もあさってもいい天気でしょう。 //「いい天気」の前に「きっと」を挿入する string s2 = s.Replace("いい天気", "きっといい天気"); //明日もきっといい天気でしょう。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。