次は文字列の連結と分割。文字連結といえば、+演算子。
var name = "山田" + "TARO";
連結はこの+演算子でだいたい事足りるが、文字列配列の場合はJoinメソッドを使うと便利な使い方ができる。
var languages = new[] { "C", "Java", "VB", "Ruby" ,}; // 区切り文字を指定 var separator = "+"; var result = String.Join(separator, languages); // C+Java+VB+Rubyと出力される Console.WriteLine(result);
Joinメソッドは、指定した区切り文字で文字配列の各要素を連結したが、Splitメソッドでは指定した文字で文字列を分割することができる。
var text = "The quick brown fox jumps over the lazy dog"; // {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" }が格納される string[] words = text.Split(' ');
Splitメソッドはオーバーロードされたメソッドもあり、これを使うと複数の区切り文字を指定できる。
var text = "The quick brown fox jumps over the lazy dog."; // 空白とピリオドを区切り文字に指定している。 // 第2引数は、空の配列要素を含めないように指定 string[] words = text.Split(new[] { ' ', '.' },StringSplitOptions.RemoveEmptyEntries);
ここまで文字列連結についてまとめてきたが、文字列は不変オブジェクトである。
以下のようなコードの場合、s1は新たな6文字分のインスタンスが作成されている。
var s1 = "ABC"; s1 = s1 + "XYZ";
毎回インスタンスを作成していたのでは非効率なため、StringBuilderクラスが用意されている。
var sb = new StringBuilder(); // 文字列を追加 sb.Append("やまだ"); sb.Append("TARO"); // やまだTAROと出力 // ToString()メソッドで、文字列に変換 Console.WriteLine(sb.ToString());