[C#] String.SubStringメソッドの使い方 – 部分文字列の取得

C#のString.Substringメソッドは、文字列から指定した位置の部分文字列を取得するために使用されます。

Substringには2つのオーバーロードがあります。

1つ目はSubstring(int startIndex)で、指定した開始位置から文字列の最後までを取得します。

2つ目はSubstring(int startIndex, int length)で、開始位置と取得する文字数を指定します。

インデックスは0から始まります。

範囲外のインデックスを指定するとArgumentOutOfRangeExceptionが発生します。

この記事でわかること
  • Substringメソッドの基本的な使い方
  • 部分文字列の取得方法
  • エラーハンドリングの重要性
  • 他の文字列操作メソッドとの違い
  • 応用例を通じた活用法

目次から探す

String.Substringメソッドとは

C#のString.Substringメソッドは、文字列から部分文字列を取得するための非常に便利な機能です。

このメソッドを使用することで、特定の位置から始まる文字列の一部を簡単に切り出すことができます。

Substringメソッドは、開始位置を指定するだけでなく、必要に応じて取得する文字数を指定することも可能です。

例えば、文字列「こんにちは、世界!」から「こんにちは」を取得したい場合、Substringメソッドを使って簡単に実現できます。

このメソッドは、文字列操作を行う際に非常に役立ち、特にデータ処理やテキスト解析の場面で頻繁に使用されます。

Substringメソッドは、文字列のインデックスを基に動作するため、インデックスの範囲に注意が必要です。

正しく使用することで、効率的に部分文字列を取得し、プログラムの可読性を向上させることができます。

Substringメソッドの基本的な使い方

開始位置を指定して部分文字列を取得する

Substringメソッドを使用する最も基本的な方法は、開始位置を指定して部分文字列を取得することです。

開始位置は0から始まるインデックスで指定します。

以下のサンプルコードでは、文字列「こんにちは、世界!」から「こんにちは」を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "こんにちは、世界!";
        string subString = originalString.Substring(0); // 開始位置を0に指定
        
        Console.WriteLine(subString); // 部分文字列を出力
    }
}
こんにちは、世界!

このように、開始位置を指定することで、文字列の一部を簡単に取得できます。

開始位置と長さを指定して部分文字列を取得する

Substringメソッドでは、開始位置に加えて取得する文字数を指定することもできます。

これにより、より具体的な部分文字列を取得することが可能です。

以下のサンプルコードでは、文字列「こんにちは、世界!」から「世界」を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "こんにちは、世界!";
        string subString = originalString.Substring(6, 2); // 開始位置6から2文字を取得
        
        Console.WriteLine(subString); // 部分文字列を出力
    }
}
世界

このように、開始位置と長さを指定することで、特定の部分文字列を取得できます。

インデックスの範囲に注意する

Substringメソッドを使用する際には、インデックスの範囲に注意が必要です。

指定した開始位置が文字列の長さを超えている場合、ArgumentOutOfRangeExceptionが発生します。

また、開始位置と長さの合計が文字列の長さを超える場合も同様です。

以下のサンプルコードでは、範囲外のインデックスを指定した場合の例を示します。

using System;
class Program
{
    static void Main()
    {
        string originalString = "こんにちは、世界!";
        
        try
        {
            string subString = originalString.Substring(10); // 範囲外のインデックスを指定
            Console.WriteLine(subString);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine("エラー: " + e.Message); // エラーメッセージを出力
        }
    }
}
エラー: startIndex cannot be larger than length of string. (Parameter 'startIndex')

このように、インデックスの範囲に注意しながらSubstringメソッドを使用することが重要です。

Substringメソッドの具体例

文字列の一部を切り出す例

Substringメソッドを使用して、文字列の特定の部分を切り出すことができます。

以下のサンプルコードでは、文字列「C#プログラミングの世界」から「プログラミング」を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミングの世界";
        string subString = originalString.Substring(2, 7); // 開始位置2から6文字を取得
        
        Console.WriteLine(subString); // 部分文字列を出力
    }
}
プログラミング

このように、Substringメソッドを使うことで、特定の位置から必要な部分を簡単に切り出すことができます。

文字列の先頭から特定の長さを取得する例

文字列の先頭から特定の長さの部分文字列を取得することも可能です。

以下のサンプルコードでは、文字列「C#プログラミングの世界」から先頭の C# を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミングの世界";
        string subString = originalString.Substring(0, 2); // 開始位置0から2文字を取得
        
        Console.WriteLine(subString); // 部分文字列を出力
    }
}
C#

このように、先頭から特定の長さを指定することで、必要な部分を取得できます。

文字列の末尾から部分文字列を取得する例

Substringメソッドを使用して、文字列の末尾から部分文字列を取得することもできます。

以下のサンプルコードでは、文字列「C#プログラミングの世界」から「世界」を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミングの世界";
        string subString = originalString.Substring(10); // 開始位置10から末尾までを取得
        
        Console.WriteLine(subString); // 部分文字列を出力
    }
}
世界

このように、Substringメソッドを使うことで、文字列の末尾からも簡単に部分文字列を取得することができます。

Substringメソッドのエラーハンドリング

ArgumentOutOfRangeExceptionの対処法

Substringメソッドを使用する際、指定した開始位置や長さが文字列の範囲を超えている場合、ArgumentOutOfRangeExceptionが発生します。

このエラーを防ぐためには、事前にインデックスが有効かどうかを確認することが重要です。

以下のサンプルコードでは、インデックスの範囲をチェックしてからSubstringメソッドを呼び出しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";
        int startIndex = 2; // 開始位置
        int length = 7; // 取得する文字数
        if (startIndex >= 0 && startIndex + length <= originalString.Length)
        {
            string subString = originalString.Substring(startIndex, length);
            Console.WriteLine(subString); // 部分文字列を出力
        }
        else
        {
            Console.WriteLine("エラー: インデックスが範囲外です。");
        }
    }
}
プログラミング

このように、インデックスの範囲を確認することで、エラーを未然に防ぐことができます。

空文字列やnullに対する処理

Substringメソッドを呼び出す前に、対象の文字列が空文字列やnullでないかを確認することも重要です。

空文字列やnullに対してSubstringを呼び出すと、ArgumentNullExceptionArgumentOutOfRangeExceptionが発生します。

以下のサンプルコードでは、文字列がnullまたは空でないことを確認しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = null; // nullの文字列
        if (!string.IsNullOrEmpty(originalString))
        {
            string subString = originalString.Substring(0, 1);
            Console.WriteLine(subString);
        }
        else
        {
            Console.WriteLine("エラー: 文字列がnullまたは空です。");
        }
    }
}
エラー: 文字列がnullまたは空です。

このように、nullや空文字列に対する処理を行うことで、エラーを回避できます。

範囲外のインデックスを指定した場合の挙動

Substringメソッドに範囲外のインデックスを指定した場合、ArgumentOutOfRangeExceptionが発生します。

このエラーは、プログラムの実行を中断させるため、適切なエラーハンドリングが必要です。

以下のサンプルコードでは、範囲外のインデックスを指定した場合の挙動を示しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";
        try
        {
            string subString = originalString.Substring(20); // 範囲外のインデックスを指定
            Console.WriteLine(subString);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine("エラー: " + e.Message); // エラーメッセージを出力
        }
    }
}
エラー: startIndex cannot be larger than length of string. (Parameter 'startIndex')

このように、範囲外のインデックスを指定した場合には、適切にエラーハンドリングを行うことが重要です。

Substringメソッドの応用例

特定の文字列を検索して切り出す

Substringメソッドを使用して、特定の文字列を検索し、その位置から部分文字列を切り出すことができます。

以下のサンプルコードでは、文字列「C#プログラミングの世界」から「プログラミング」を取得しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミングの世界";
        int startIndex = originalString.IndexOf("プログラミング"); // 特定の文字列のインデックスを取得
        
        if (startIndex != -1) // 見つかった場合
        {
            string subString = originalString.Substring(startIndex, 7); // 部分文字列を取得
            Console.WriteLine(subString); // 部分文字列を出力
        }
        else
        {
            Console.WriteLine("文字列が見つかりませんでした。");
        }
    }
}
プログラミング

このように、特定の文字列を検索してその位置から部分文字列を取得することができます。

文字列のフォーマットを整える

Substringメソッドを使用して、文字列のフォーマットを整えることも可能です。

以下のサンプルコードでは、日付文字列から年、月、日を切り出して整形しています。

using System;
class Program
{
    static void Main()
    {
        string dateString = "2023-10-15";
        string year = dateString.Substring(0, 4); // 年を取得
        string month = dateString.Substring(5, 2); // 月を取得
        string day = dateString.Substring(8, 2); // 日を取得
        Console.WriteLine($"日付: {year}年{month}月{day}日"); // 整形した日付を出力
    }
}
日付: 2023年10月15日

このように、Substringメソッドを使って文字列のフォーマットを整えることができます。

文字列の一部を置換する

Substringメソッドを使用して、文字列の一部を置換することもできます。

以下のサンプルコードでは、文字列「C#プログラミング」を「C#開発」に置換しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";
        string newString = originalString.Substring(0, 2) + "開発"; // 一部を置換
        
        Console.WriteLine(newString); // 置換後の文字列を出力
    }
}
C#開発

このように、Substringメソッドを使って文字列の一部を置換することができます。

文字列の前後の空白を削除する

Substringメソッドを使用して、文字列の前後の空白を削除することも可能ですが、Trimメソッドを使用する方が一般的です。

以下のサンプルコードでは、Trimメソッドを使って前後の空白を削除しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "   C#プログラミング   ";
        string trimmedString = originalString.Trim(); // 前後の空白を削除
        
        Console.WriteLine($"'{trimmedString}'"); // 空白削除後の文字列を出力
    }
}
'C#プログラミング'

このように、Trimメソッドを使うことで、文字列の前後の空白を簡単に削除できます。

文字列の一部を比較する

Substringメソッドを使用して、文字列の一部を比較することもできます。

以下のサンプルコードでは、文字列の一部が特定の文字列と一致するかどうかを確認しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";
        string subString = originalString.Substring(2, 7); // 部分文字列を取得
        
        if (subString == "プログラミング") // 一致を確認
        {
            Console.WriteLine("一致しました。");
        }
        else
        {
            Console.WriteLine("一致しませんでした。");
        }
    }
}
一致しました。

このように、Substringメソッドを使って文字列の一部を比較することができます。

Substringメソッドと他の文字列操作メソッドの比較

SubstringとSplitの違い

SubstringメソッドSplitメソッドは、どちらも文字列を操作するためのメソッドですが、目的が異なります。

  • Substring: 指定した開始位置から部分文字列を取得します。

文字列の一部を切り出すために使用されます。

  • Split: 指定した区切り文字を基に文字列を分割し、配列として返します。

文字列を複数の部分に分けるために使用されます。

以下のサンプルコードでは、SubstringSplitの使い方を示しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング,Java,Python";
        
        // Substringの例
        string subString = originalString.Substring(0, 2); // "C#"
        Console.WriteLine($"Substring: {subString}");
        
        // Splitの例
        string[] splitStrings = originalString.Split(','); // ["C#プログラミング", "Java", "Python"]
        Console.WriteLine($"Split: {string.Join(", ", splitStrings)}");
    }
}
Substring: C#
Split: C#プログラミング, Java, Python

このように、Substringは部分文字列を取得するのに対し、Splitは文字列を分割して配列を作成します。

SubstringとRemoveの違い

SubstringメソッドRemoveメソッドも異なる目的を持っています。

  • Substring: 指定した開始位置から部分文字列を取得します。

文字列の一部を切り出すために使用されます。

  • Remove: 指定した位置から指定した長さの文字を削除し、新しい文字列を返します。

文字列の一部を削除するために使用されます。

以下のサンプルコードでは、SubstringRemoveの使い方を示しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";

        // Substringの例
        string subString = originalString.Substring(2, 5); // "プログラ"
        Console.WriteLine($"Substring: {subString}");

        // Removeの例
        string removedString = originalString.Remove(2, 5); // "C#ング"
        Console.WriteLine($"Remove: {removedString}");
    }
}
Substring: プログラミ
Remove: C#ング

このように、Substringは部分文字列を取得するのに対し、Removeは指定した部分を削除します。

SubstringとReplaceの違い

SubstringメソッドReplaceメソッドは、文字列の操作において異なる役割を果たします。

  • Substring: 指定した開始位置から部分文字列を取得します。

文字列の一部を切り出すために使用されます。

  • Replace: 指定した文字列を別の文字列に置換します。

文字列の一部を変更するために使用されます。

以下のサンプルコードでは、SubstringReplaceの使い方を示しています。

using System;
class Program
{
    static void Main()
    {
        string originalString = "C#プログラミング";
        
        // Substringの例
        string subString = originalString.Substring(2, 6); // "プログラミン"
        Console.WriteLine($"Substring: {subString}");
        
        // Replaceの例
        string replacedString = originalString.Replace("プログラ", "開発"); // "C#開発ミング"
        Console.WriteLine($"Replace: {replacedString}");
    }
}
Substring: プログラミン
Replace: C#開発ミング

このように、Substringは部分文字列を取得するのに対し、Replaceは指定した部分を別の文字列に置換します。

よくある質問

Substringメソッドで負のインデックスを指定できますか?

Substringメソッドでは、負のインデックスを指定することはできません。

負のインデックスを指定すると、ArgumentOutOfRangeExceptionが発生します。

インデックスは0以上の整数でなければならず、文字列の範囲内で指定する必要があります。

したがって、負のインデックスを使用しないように注意が必要です。

Substringメソッドで文字列の長さを超えるインデックスを指定するとどうなりますか?

Substringメソッドで文字列の長さを超えるインデックスを指定すると、ArgumentOutOfRangeExceptionが発生します。

これは、指定した開始位置が文字列の範囲外であるためです。

したがって、Substringを使用する際には、インデックスが有効であることを確認することが重要です。

Substringメソッドは元の文字列を変更しますか?

Substringメソッドは元の文字列を変更しません。

C#の文字列は不変(immutable)であるため、Substringメソッドを呼び出しても元の文字列はそのまま残ります。

Substringメソッドは、新しい部分文字列を返すだけです。

元の文字列を変更したい場合は、新しい文字列を代入する必要があります。

まとめ

この記事では、C#のSubstringメソッドの基本的な使い方や具体例、エラーハンドリング、応用例、他の文字列操作メソッドとの比較について詳しく解説しました。

Substringメソッドは、文字列から特定の部分を切り出すための強力なツールであり、正しく使用することでプログラムの効率を向上させることができます。

ぜひ、実際のプログラムでSubstringメソッドを活用し、文字列操作のスキルをさらに磨いてみてください。

  • URLをコピーしました!
目次から探す