はじめに
例えば、以下のように画像に名前が付いていた時、
monster_1_1_1
monster_3_2_5
数字部分だけ変えて画像名の文字列を作りたいと言った場合のやり方です。
連結演算子
まずは連結演算子を使ったやり方です。
const string MONSTER_IMAGE_NAME_PREVIOUS = "monster"; int monsterTypeNo = 3; int monstertColorNo = 2; int monsterImageNo = 5; string imageName = MONSTER_IMAGE_NAME_PREVIOUS + "_" + monsterTypeNo.ToString () + "_" + monstertColorNo.ToString () + "_" + monsterImageNo.ToString (); Debug.Log (imageName);
monster_3_2_5
画像名の前半部分を定数で宣言しておき、数字部分を連結していくという方法です。
この方法でも実現可能ですが、monster_1_1_1_afterのように数字の後にさらに文字列がある場合などは
さらに連結が必要になり、コードが長くなりがちです。
String.Format
次にString.Formatを使ったやり方です。
const string MONSTER_IMAGE_NAME_FORMAT = "monster_{0}_{1}_{2}"; int monsterTypeNo = 3; int monstertColorNo = 2; int monsterImageNo = 5; string imageName = string.Format ( MONSTER_IMAGE_NAME_FORMAT, monsterTypeNo, monstertColorNo, monsterImageNo ); Debug.Log (imageName);
monster_3_2_5
これは表題にある通り、文字列のフォーマットを定数で設定しておいて、
そのフォーマットの{0}や{1}といった変更される部分に数字を入れていくといった方法です。
StringBuilder. AppendFormat
最後にStringBuilder. AppendFormatを使ったやり方です。
using System.Text; const string MONSTER_IMAGE_NAME_FORMAT = "monster_{0}_{1}_{2}"; int monsterTypeNo = 3; int monstertColorNo = 2; int monsterImageNo = 5; StringBuilder builder = new StringBuilder (); builder.AppendFormat( MONSTER_IMAGE_NAME_FORMAT, monsterTypeNo, monstertColorNo, monsterImageNo ); string imageName = builder.ToString (); Debug.Log (imageName);
monster_3_2_5
これもやり方としてはString.Formatと同じく変更される部分に数字を入れていくといった方法です。
ただ、using System.Text;を宣言しなくてはならないし、
stringとは別にStringBuilderを使わなきゃいけないのでちょっと面倒です。
おわりに
下記のサイトにあるように、場合によっては
連結演算子を使った方が処理時間が短い場合もあるので注意が必要です、
「C# String Concat Programs」によると、複数の文字列を連結する時、連結演算子やConcatメソッドを使って一度に連結する方法が、String.FormatやStringBuilder.Appendメソッドを使った方法よりもパフォーマンスが良いということです。
文字列を連結する: .NET Tips: C#, VB.NET
とは言え、String.Formatを使った方が綺麗に書ける気がするので、
よっぽど頻繁または大量に実行にするのでなければ、処理速度の方は気にしなくていいと思います。