文字列と文字配列(char[])
C#において、string(文字列)型は「不変(Immutable)」です。つまり、一度作成された文字列オブジェクトの"ABC"という中身を、"ADC"のように一部分だけ変更することはできません。
一方で、char[](文字の配列)は「可変(Mutable)」です。配列のarray[1] = 'D'のように、インデックスを指定して特定の文字を自由に変更できます。
そのため、「文字列の一部分をインデックスで指定して書き換えたい」という操作を行う場合、一度stringをchar[]に変換し、配列上で文字を操作してから、再びstringに戻す、という手順が一般的に用いられます。
この記事では、stringからchar[]へ、そしてchar[]からstringへと相互に変換する基本的な方法を解説します。
string から char[] への変換
string型(文字列)をchar[](文字配列)に変換するには、ToCharArray()メソッド(またはLINQのToArray())を使用します。
ToCharArray():stringクラスが直接提供するメソッドです。ToArray():stringがIEnumerable<char>(文字のシーケンス)を実装しているため、System.Linq名前空間をusingしている場合に使用できます。
どちらも機能的にはほぼ同等ですが、ToCharArray()の方がstring専用のメソッドとして意図が明確です。
コード例:ToCharArray
C#
using System;
using System.Linq; // ToArray を使う場合は必要
public class StringToCharArrayExample
{
public static void Main()
{
string baseString = "C# Language";
// 1. string.ToCharArray() を使用
char[] arrayFromMethod = baseString.ToCharArray();
// 2. LINQ の ToArray() を使用
// char[] arrayFromLinq = baseString.ToArray();
Console.WriteLine($"元の文字列: {baseString}");
Console.WriteLine("--- char[] の中身 ---");
// string.Join を使って、配列の中身を '_' 区切りで表示
Console.WriteLine(string.Join("_", arrayFromMethod));
}
}
出力結果:
元の文字列: C# Language
--- char[] の中身 ---
C_#_ _L_a_n_g_u_a_g_e
char[] から string への変換
char[](文字配列)を単一のstring(文字列)に変換するには、stringクラスのコンストラクタ(new String(...))を使用するのが最も標準的で効率的な方法です。
コード例:new String() コンストラクタ
C#
using System;
public class CharArrayToStringExample
{
public static void Main()
{
// 文字の配列
char[] characters = { 'R', 'e', 'p', 'o', 'r', 't' };
// 1. new String(char[]) コンストラクタ
string newString = new String(characters);
Console.WriteLine($"元の文字配列: { string.Join(",", characters) }");
Console.WriteLine($"変換後の文字列: {newString}");
}
}
出力結果:
元の文字配列: R,e,p,o,r,t
変換後の文字列: Report
応用例:文字列の一部を書き換える
stringの不変性を回避し、文字列の一部を変更する実用的な例です。string -> char[] -> (操作) -> char[] -> string という流れになります。
コード例:ステータスの書き換え
“STATUS:OK” という文字列を “STATUS:NG” に書き換えます。
C#
using System;
public class ModifyStringExample
{
public static void Main()
{
string logEntry = "STATUS:OK";
Console.WriteLine($"変更前の文字列: {logEntry}");
// 1. 文字列を char[] に変換 (可変にする)
char[] logChars = logEntry.ToCharArray();
// 2. 配列のインデックスを直接操作
// 'O' (インデックス 7) を 'N' に
// 'K' (インデックス 8) を 'G' に
if (logChars.Length > 8 && logChars[7] == 'O' && logChars[8] == 'K')
{
logChars[7] = 'N';
logChars[8] = 'G';
}
// 3. 変更された char[] を new String() で string に戻す
string updatedLog = new String(logChars);
Console.WriteLine($"変更後の文字列: {updatedLog}");
}
}
出力結果:
変更前の文字列: STATUS:OK
変更後の文字列: STATUS:NG
まとめ
stringとchar[]の相互変換は、C#における文字列操作の基本テクニックです。
string->char[]:str.ToCharArray()メソッド(またはLINQのstr.ToArray())を使用します。char[]->string:new String(charArray)コンストラクタを使用します。
この2つの操作を組み合わせることで、不変であるstring型の特定の文字を効率的に変更する操作が実現できます。
