エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】ある文字を指定した回数だけ連続する文字列を作成するやり方を解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#ある文字指定した回数だけ連続する文字列を作成するやり方について解説します。

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

ある文字を指定した回数だけ連続する文字列を作成するやり方

この記事で紹介するやり方は3つです。
それは

  1. for文で追加
  2. Stringクラスのコンストラクタを使う
  3. StringBuilder.Insertメソッドを使う

それぞれの結果をコンソールに表示させます。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

では、1つずつ解説します!

やり方その1:for文で追加

やりかたその1は、for文で追加するやり方です。
次のように書きます。

C#

using System;

namespace ConsoleApp1
{
    /// <summary>
    /// ある文字を指定した回数だけ
    /// 連続する文字列を作成その1
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string forString = "";

            for(int i = 0; i < 10; i++)
            {
                forString += 'a';
            }

            Console.WriteLine(forString);
        }
    }
}

実行結果

f:id:Tairax:20190206213519p:plain

aaaaaaaaaa
続行するには何かキーを押してください . . .

では、解説します。

解説

このfor文では、10回処理を繰り返します。
文字列を連結するところは、ここです。

for(int i = 0; i < 10; i++)
{
    forString += 'a';
}

ここで、10回文字列を連結しています。

その2:Stringクラスのコンストラクタを使う

Stringクラスには、指定した回数だけの文字列を作成するというコンストラクタがあります。
それを使って、文字列を作成します。

C#

using System;

namespace ConsoleApp1
{
    /// <summary>
    /// ある文字を指定した回数だけ
    /// 連続する文字列を作成その2
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string constString = new string('b', 12);
            Console.WriteLine(constString);
        }
    }
}

実行結果

f:id:Tairax:20190206214739p:plain

bbbbbbbbbbbb
続行するには何かキーを押してください . . .

では、解説します。

解説

指定した回数だけの文字列を作成するコンストラクタの書き方は下記です。

String(Char, Int32)
String クラスの新しいインスタンスを初期化し、指定した回数だけ繰り返した指定の Unicode 文字が示す値に設定します。

public String (char c, int count);

String Constructor (System) | Microsoft Docsから引用させて頂きました

文字と数字を指定すれば良いだけなので、とても楽です。
このプログラムでコンストラクタを使っているところはここです。

string constString = new string('b', 12);

このコンストラクタを使って、文字列を作成しています。

その3:StringBuilder.Insertメソッドを使う

StringBuilderには、指定された文字指定された回数だけ文字列を作って挿入するInsertメソッドがあります。
それを使って、文字列を作成します。

C#

using System;
using System.Text;

namespace ConsoleApp1
{
    /// <summary>
    /// ある文字を指定した回数だけ
    /// 連続する文字列を作成その3
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string stringBuilderString =
                new StringBuilder().Insert(0, "c", 14).ToString();
            Console.WriteLine(stringBuilderString);
        }
    }
}

実行結果

f:id:Tairax:20190206221218p:plain

cccccccccccccc
続行するには何かキーを押してください . . .

では、解説します。

解説

StringBuilder.Insertメソッドの書き方は下記です。

Insert(Int32, String, Int32)
指定した文字列の 1 つ以上のコピーをこのインスタンスの指定した文字位置に挿入します。

public System.Text.StringBuilder Insert (int index, string value, int count);

StringBuilder.Insert Method (System.Text) | Microsoft Docsから引用させて頂きました

Insertメソッドは、指定した位置に文字列を挿入します。
だから、Insertメソッドを使って文字列を作成する場合は1番目の引数を0にする必要があります。
何故ならエラーになるからです。

上のプログラムのInsert部分を

string stringBuilderString =
    new StringBuilder().Insert(3, "c", 14).ToString();

って変えて実行してみると

f:id:Tairax:20190206222913p:plain


ハンドルされていない例外: System.ArgumentOutOfRangeException: インデックスが範囲
を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません
。
パラメーター名:index
   場所 System.Text.StringBuilder.Insert(Int32 index, String value, Int32 count)

   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 18
続行するには何かキーを押してください . . .

このようにエラーが出ます。

まとめ:好きなやり方で同じ文字のstringを作ろう

以上がある文字を指定した回数だけ連続する文字列を作成するやり方の解説です。
やり方をもう1回まとめると

  1. for文で追加
  2. Stringクラスのコンストラクタを使う
  3. StringBuilder.Insertメソッドを使う

です!
あなたの好きなやり方で作ってみてください!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#勉強記事を書いてます。
よければご参考ください。

【C#】【LINQ】Anyメソッドについて解説します

【C#】コンストラクタからコンストラクタを呼ぶ、コンストラクタ初期化子について解説します

【C#】配列からListに変換するやり方を解説します