【C#.NET解説】Stringクラスの徹底解説 強力な文字列操作機能を雷の化身が解説

2024年12月5日木曜日

基本 文字列操作

t f B! P L

名前空間 System

String

自己紹介

私は空を駆ける雷の化身だ!今日は「String」クラスという非常に重要なツールについて語ろう
「String」クラスは、文字列を扱うためのクラスであり、C#では文字列はイミュータブル(変更不可)だ。この特徴により、安全かつ効率的な文字列操作が可能となる。

「String」は型のように見えるが、実際にはクラスだ。新しい文字列を生成するたびにインスタンスが作られる。この仕組みを覚えておけ!

基本機能

「String」クラスの基本機能を見てみよう。文字列の結合や部分文字列の取り出しなど、簡単な操作が可能だ。

C#

// Stringクラスの基本的な使い方
using System;

class Program
{
    static void Main()
    {
        string firstName = "太郎";
        string lastName = "山田";

        // 文字列の結合
        string fullName = firstName + " " + lastName;
        Console.WriteLine($"名前: {fullName}");

        // 部分文字列の取得
        string firstChar = fullName.Substring(0, 1); // 最初の文字
        Console.WriteLine($"最初の文字: {firstChar}");
    }
}

上の例では、「+」演算子を使った結合と、`Substring`メソッドで部分文字列を取り出している。

使う場面の注意点

「String」クラスの使い方で注意が必要なのは、文字列がイミュータブルである点だ。繰り返し結合を行う場合、メモリ効率が低下する可能性がある。以下の例を見てみよう。

C#

using System;
using System.Diagnostics;
using System.Text;

class Program
{
    static void Main()
    {
        int iterations = 10000;
        
        // Stringクラスでの文字列結合
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        
        string str = string.Empty;
        for (int i = 0; i < iterations; i++)
        {
            str += "a";
        }

        stopwatch.Stop();
        Console.WriteLine($"String: Time elapsed: {stopwatch.ElapsedMilliseconds} ms");

        // StringBuilderクラスでの文字列結合
        stopwatch.Reset();
        stopwatch.Start();
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < iterations; i++)
        {
            sb.Append("a");
        }

        stopwatch.Stop();
        Console.WriteLine($"StringBuilder: Time elapsed: {stopwatch.ElapsedMilliseconds} ms");
    }
}

頻繁に文字列を変更する場合は、StringBuilderを使うべきだ。

文字列操作に役立つさまざまなメソッド

「String」クラスには多くの便利なメソッドがある。ここでは、代表的なものをいくつか紹介する。

C#

// 文字列操作の便利なメソッド
using System;

class Program
{
    static void Main()
    {
        string text = " Hello C#.NET World ";

        // トリム
        string trimmed = text.Trim();
        Console.WriteLine($"トリム後: '{trimmed}'");

        // 大文字化
        string upper = trimmed.ToUpper();
        Console.WriteLine($"大文字化: {upper}");

        // 小文字化
        string lower = trimmed.ToLower();
        Console.WriteLine($"小文字化: {lower}");

        // 分割
        string[] words = trimmed.Split(' ');
        Console.WriteLine("分割結果:");
        foreach (string word in words)
        {
            Console.WriteLine(word);
        }

        // 置換
        string replaced = trimmed.Replace("C#", "Java");
        Console.WriteLine($"置換結果: {replaced}");
    }
}

これらのメソッドは、文字列の整形やフォーマットに非常に役立つ。

具体的な使い方

実用的な例として、CSVデータのパースと整形を行うコードを見てみよう。

C#

// CSVデータのパース例
using System;

class Program
{
    static void Main()
    {
        string csvData = "名前,年齢,職業\n太郎,30,エンジニア\n花子,28,デザイナー";

        // 行ごとに分割
        string[] rows = csvData.Split('\n');
        foreach (string row in rows)
        {
            // 列ごとに分割
            string[] columns = row.Split(',');
            Console.WriteLine($"名前: {columns[0]}, 年齢: {columns[1]}, 職業: {columns[2]}");
        }
    }
}

このコードは、CSV形式のデータを分割し、それぞれの値を取り出している。

それ以外の便利なメソッド

ここでは、10個以上の便利なメソッドを列挙して紹介する。

C#

// 便利なメソッド一覧
using System;

class Program
{
    static void Main()
    {
        string sample = "ExampleString";

        Console.WriteLine($"長さ: {sample.Length}"); // 長さ
        Console.WriteLine($"空か: {string.IsNullOrEmpty(sample)}"); // 空チェック
        Console.WriteLine($"部分一致: {sample.StartsWith("Ex")}"); // 前方一致
        Console.WriteLine($"部分一致: {sample.EndsWith("ing")}"); // 後方一致
        Console.WriteLine($"インデックス: {sample.IndexOf("Str")}"); // 部分文字列のインデックス
        Console.WriteLine($"挿入: {sample.Insert(7, "Modified")}"); // 挿入
        Console.WriteLine($"削除: {sample.Remove(7, 3)}"); // 削除
        Console.WriteLine($"サブストリング: {sample.Substring(7)}"); // サブストリング
        Console.WriteLine($"比較: {sample.CompareTo("ExampleString")}"); // 比較
        Console.WriteLine($"フォーマット: {string.Format("値は{0}です", 42)}"); // フォーマット
    }
}

これらのメソッドを駆使すれば、文字列操作の幅が広がること間違いなしだ。

このブログを検索

QooQ