今回は、C#のSubstringで文字列の一部を取得する方法についてご紹介します。
関連記事
目次
Substringとは
Substringとは、既存の文字列から一部の文字列を切り出し、新しい文字列として取得するためのメソッドです。
文字列は変更不可(イミュータブル)なため、Substringメソッドを使っても元の文字列は変化しません。
代わりに、切り出したい範囲を指定して新しい文字列を返す仕組みになっています。
Substringメソッドの基本仕様
Substringには大きく分けて2つのオーバーロードがあります。
- Substring(int startIndex): 指定した開始位置から末尾までの部分文字列を取得
- Substring(int startIndex, int length): 開始位置と切り出す長さを指定し、その範囲の部分文字列を取得
たとえば、文字列が「Hello, World!」の場合、インデックスは先頭のHが0、eが1、lが2…のように割り振られています。
startIndexやlengthの値が不正(負の値や範囲外)であると、ArgumentOutOfRangeExceptionが発生するので注意が必要です。
実用的な具体例
例1: 開始位置から末尾まで抽出する
次の例では、文字列中のインデックス7以降を抽出します。
1 2 3 4 |
string text = "Hello, World!"; // インデックス7以降(W)から末尾まで抽出 string result = text.Substring(7); Console.WriteLine(result); |
実行結果
World!
例2: 開始位置と文字数を指定して抽出する
次の例では、先頭(インデックス0)から5文字だけ取得し、「Hello」という部分文字列を取り出します。
1 2 3 4 |
string text = "Hello, World!"; // インデックス0から5文字分を抽出 string result = text.Substring(0, 5); Console.WriteLine(result); |
実行結果
Hello
例3: 区切り文字を用いたユーザー情報の分割
文字列中に含まれる「:」の位置をIndexOfで探し、その位置をもとにSubstringで分割する方法です。
1 2 3 4 5 6 7 8 9 10 11 12 |
string credentials = "user:password"; // 区切り文字「:」のインデックスを取得 int separatorIndex = credentials.IndexOf(':'); if (separatorIndex != -1) { // 「:」の手前をユーザー名、後ろをパスワードとして抽出 string username = credentials.Substring(0, separatorIndex); string password = credentials.Substring(separatorIndex + 1); Console.WriteLine(username); Console.WriteLine(password); } |
実行結果
user
password
例4: 安全に切り出すための長さチェック
文字列の長さに応じて、Substringを実行する前に範囲外アクセスを防ぐ方法です。
1 2 3 4 5 6 7 |
string longText = "This is a long text."; // 文字列の長さをチェックして安全に切り出す if (longText.Length >= 10) { string firstTenChars = longText.Substring(0, 10); Console.WriteLine(firstTenChars); } |
実行結果
This is a
Substring利用時の注意点
Substringを使うときは、次の点に注意すると安心です。
- 範囲外エラー: startIndexやlengthが不正になるとArgumentOutOfRangeExceptionが発生
- パフォーマンス: 文字列は不変のため、頻繁にSubstringを使うと不要な文字列が多く生成される可能性がある
- 他の手法との併用: SplitやRegex、C# 8.0以降のRange構文(例: text[0..5])も併せて検討する
まとめ
C#のSubstringメソッドは、文字列操作の要となるメソッドのひとつです。
開始位置や文字数を柔軟に指定して部分文字列を取り出せるため、さまざまな場面で活用できます。
基本仕様や具体例、注意点をおさえておけば、より効率的にSubstringを使いこなせるでしょう。
関連記事