DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

文字列を指定回数繰り返した文字列を取得する

例えば、「パチ」という文字列を3回繰り返して、「パチパチパチ」という文字列を取得するというように、指定した文字列を指定した回数繰り返した文字列を取得する方法を紹介します。

指定した文字を指定した回数繰り返した文字列を取得する

もし繰り返す文字列が1文字だけならば、Stringクラスのコンストラクタを使って一発でできます。

VB.NET
コードを隠すコードを選択
''w'という文字を10回繰り返した文字列を取得する
Dim repeatedString As New String("w"c, 10)

'結果を表示する
Console.WriteLine(repeatedString)
'wwwwwwwwww
C#
コードを隠すコードを選択
//'w'という文字を10回繰り返した文字列を取得する
string repeatedString = new string('w', 10);

//結果を表示する
Console.WriteLine(repeatedString);
//wwwwwwwwww

VB.NETでは、Strings.StrDupメソッドを使用することもできます。

VB.NET
コードを隠すコードを選択
''w'という文字を10回繰り返した文字列を取得する
Dim repeatedString As String = StrDup(10, "w"c)

'結果を表示する
Console.WriteLine(repeatedString)
'wwwwwwwwww

For文で繰り返して連結する方法

文字列を繰り返す場合、一発でできる方法はありません。ありきたりですが、For文で繰り返して文字列を連結することにします。

VB.NET
コードを隠すコードを選択
''' <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
C#
コードを隠すコードを選択
/// <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();
}

Enumerable.RepeatとString.Concatを使用する方法

.NET Framework 3.5以降であれば、Enumerable.RepeatメソッドString.Concatメソッドを使って、次のようにできます。

VB.NET
コードを隠すコードを選択
'"わい"という文字列を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)
'わいわいわいわいわいわいわいわいわいわい
C#
コードを隠すコードを選択
//"わい"という文字列を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メソッドを使用する方法

StringBuilder.Insertメソッドには、指定した文字列を指定した回数挿入する機能があります。これを使うと、次のようにできます。

VB.NET
コードを隠すコードを選択
'"パタ"という文字列を10回繰り返した文字列を取得する
Dim repeatedString As String = _
    (New System.Text.StringBuilder()).Insert(0, "パタ", 10).ToString()

'結果を表示する
Console.WriteLine(repeatedString)
'パタパタパタパタパタパタパタパタパタパタ
C#
コードを隠すコードを選択
//"パタ"という文字列を10回繰り返した文字列を取得する
string repeatedString =
    (new System.Text.StringBuilder()).Insert(0, "パタ", 10).ToString();

//結果を表示する
Console.WriteLine(repeatedString);
//パタパタパタパタパタパタパタパタパタパタ

繰り返した文字を置換する方法

これは、コメントで教えていただいた方法です。初めに紹介した「指定した文字を指定した回数繰り返した文字列を取得する」で作成した文字列を置換するという方法です。

VB.NET
コードを隠すコードを選択
'"ピコ"という文字列を10回繰り返した文字列を取得する
Dim repeatedString As String = (New String("*"c, 10)).Replace("*", "ピコ")

'結果を表示する
Console.WriteLine(repeatedString)
'ピコピコピコピコピコピコピコピコピコピコ
C#
コードを隠すコードを選択
//"ピコ"という文字列を10回繰り返した文字列を取得する
string repeatedString = (new string('*', 10)).Replace("*", "ピコ");

//結果を表示する
Console.WriteLine(repeatedString);
//ピコピコピコピコピコピコピコピコピコピコ

もしここで紹介した以外の方法をご存じでしたら、ぜひ教えて下さい。

  • 履歴:
  • 2016/6/12 コメントを参考にして、VB.NETのStrings.StrDupメソッドと、「繰り返した文字を置換する方法」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。