【C#】文字列の先頭だけを大文字 or 小文字に変換する

ある文字列の中の1文字だけを大文字・小文字に切り替える方法の紹介です。

C#の標準ライブラリにはこういった操作が存在しないので自分で実装することになります。今回は string クラスの拡張メソッドとして実装します。処理効率は特別な外部ライブラリを使用しない限り割と早い部類だと思います(検索して出てくるコードがいずれも効率がちょっと悪い感じだったので代替案として書いています。

先頭文字を大文字・小文字に変更する以外に番号を指定すればN文字目の大文字 ⇔ 小文字を変更することができます。

確認環境

今回の確認環境は以下の通りです。

  • Unity 2019.4.10f1 & .NET Core 3.1
  • VisualStudio 2019
  • Windows10

実装コード

実装コードは以下の通りです。StringExtension クラスを作成して実装します。

// StringExtension.cs

/// <summary>
/// <see cref="string"/> クラスを拡張します。
/// </summary>
public static class StringExtension
{
    /// <summary>
    /// 指定した n 番目の文字を大文字に変換します。
    /// </summary>
    public static string ToUpper(this string self, int no = 0)
    {
        if (no > self.Length)
        {
            return self;
        }

        var _array = self.ToCharArray();
        var up = char.ToUpper(_array[no]);
        _array[no] = up;
        return new string(_array);
    }

    /// <summary>
    /// 指定した n 番目の文字を小文字に変換します。
    /// </summary>
    public static string ToLower(this string self, int no = 0)
    {
        if (no > self.Length)
        {
            return self;
        }

        var _array = self.ToCharArray();
        var up = char.ToLower(_array[no]);
        _array[no] = up;
        return new string(_array);
    }
}

使い方

使い方は以下の通り。

string str = "abc123";
string newStr = str.ToUpper(0); // 先頭の文字を大文字に変換する
// newStr = Abc123

string newStr_2 = str.ToUpper(3);
// newStr_2 = abc123
//  → 変換できない場合元の文字列が帰る

短いですが以上です。