【C#】文字列と文字配列(char[])の相互変換:ToCharArrayとnew String

目次

文字列と文字配列(char[])

C#において、string(文字列)型は「不変(Immutable)」です。つまり、一度作成された文字列オブジェクトの"ABC"という中身を、"ADC"のように一部分だけ変更することはできません。

一方で、char[](文字の配列)は「可変(Mutable)」です。配列のarray[1] = 'D'のように、インデックスを指定して特定の文字を自由に変更できます。

そのため、「文字列の一部分をインデックスで指定して書き換えたい」という操作を行う場合、一度stringchar[]に変換し、配列上で文字を操作してから、再びstringに戻す、という手順が一般的に用いられます。

この記事では、stringからchar[]へ、そしてchar[]からstringへと相互に変換する基本的な方法を解説します。


string から char[] への変換

string型(文字列)をchar[](文字配列)に変換するには、ToCharArray()メソッド(またはLINQのToArray())を使用します。

  • ToCharArray(): stringクラスが直接提供するメソッドです。
  • ToArray(): stringIEnumerable<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

まとめ

stringchar[]の相互変換は、C#における文字列操作の基本テクニックです。

  • string -> char[]: str.ToCharArray() メソッド(またはLINQの str.ToArray())を使用します。
  • char[] -> string: new String(charArray) コンストラクタを使用します。

この2つの操作を組み合わせることで、不変であるstring型の特定の文字を効率的に変更する操作が実現できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次