例えば、「パチ」という文字列を3回繰り返して、「パチパチパチ」という文字列を取得するというように、指定した文字列を指定した回数繰り返した文字列を取得する方法を紹介します。
もし繰り返す文字列が1文字だけならば、Stringクラスのコンストラクタを使って一発でできます。
''w'という文字を10回繰り返した文字列を取得する Dim repeatedString As New String("w"c, 10) '結果を表示する Console.WriteLine(repeatedString) 'wwwwwwwwww
//'w'という文字を10回繰り返した文字列を取得する string repeatedString = new string('w', 10); //結果を表示する Console.WriteLine(repeatedString); //wwwwwwwwww
VB.NETでは、Strings.StrDupメソッドを使用することもできます。
''w'という文字を10回繰り返した文字列を取得する Dim repeatedString As String = StrDup(10, "w"c) '結果を表示する Console.WriteLine(repeatedString) 'wwwwwwwwww
文字列を繰り返す場合、一発でできる方法はありません。ありきたりですが、For文で繰り返して文字列を連結することにします。
''' <summary> ''' 指定した文字列を指定した回数繰り返した文字列を取得します。 ''' </summary> ''' <param name="s">繰り返す文字列。</param> ''' <param name="count">繰り返す回数。</param> ''' <returns>sがcount回繰り返された文字列。</returns> Public Shared Function RepeatString(s As String, count As Integer) As String Dim buf As New System.Text.StringBuilder(s.Length * count) For i As Integer = 0 To count - 1 buf.Append(s) Next Return buf.ToString() End Function
/// <summary> /// 指定した文字列を指定した回数繰り返した文字列を取得します。 /// </summary> /// <param name="s">繰り返す文字列。</param> /// <param name="count">繰り返す回数。</param> /// <returns>sがcount回繰り返された文字列。</returns> public static string RepeatString(string s, int count) { System.Text.StringBuilder buf = new System.Text.StringBuilder(s.Length * count); for (int i = 0; i < count; i++) { buf.Append(s); } return buf.ToString(); }
.NET Framework 3.5以降であれば、Enumerable.RepeatメソッドとString.Concatメソッドを使って、次のようにできます。
'"わい"という文字列を10回繰り返した文字列を取得する Dim repeatedString As String = _ String.Concat(Enumerable.Repeat("わい", 10).ToArray()) '.NET Framework 4.0からは、次のようにToArrayを省略できる Dim repeatedString2 As String = String.Concat(Enumerable.Repeat("わい", 10)) '結果を表示する Console.WriteLine(repeatedString) 'わいわいわいわいわいわいわいわいわいわい
//"わい"という文字列を10回繰り返した文字列を取得する string repeatedString = string.Concat(Enumerable.Repeat("わい", 10).ToArray()); //.NET Framework 4.0からは、次のようにToArrayを省略できる string repeatedString2 = string.Concat(Enumerable.Repeat("わい", 10)); //結果を表示する Console.WriteLine(repeatedString); //わいわいわいわいわいわいわいわいわいわい
StringBuilder.Insertメソッドには、指定した文字列を指定した回数挿入する機能があります。これを使うと、次のようにできます。
'"パタ"という文字列を10回繰り返した文字列を取得する Dim repeatedString As String = _ (New System.Text.StringBuilder()).Insert(0, "パタ", 10).ToString() '結果を表示する Console.WriteLine(repeatedString) 'パタパタパタパタパタパタパタパタパタパタ
//"パタ"という文字列を10回繰り返した文字列を取得する string repeatedString = (new System.Text.StringBuilder()).Insert(0, "パタ", 10).ToString(); //結果を表示する Console.WriteLine(repeatedString); //パタパタパタパタパタパタパタパタパタパタ
これは、コメントで教えていただいた方法です。初めに紹介した「指定した文字を指定した回数繰り返した文字列を取得する」で作成した文字列を置換するという方法です。
'"ピコ"という文字列を10回繰り返した文字列を取得する Dim repeatedString As String = (New String("*"c, 10)).Replace("*", "ピコ") '結果を表示する Console.WriteLine(repeatedString) 'ピコピコピコピコピコピコピコピコピコピコ
//"ピコ"という文字列を10回繰り返した文字列を取得する string repeatedString = (new string('*', 10)).Replace("*", "ピコ"); //結果を表示する Console.WriteLine(repeatedString); //ピコピコピコピコピコピコピコピコピコピコ
もしここで紹介した以外の方法をご存じでしたら、ぜひ教えて下さい。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。