【C#】String.Substringメソッド完全ガイド!10つのサンプルコードで徹底解説

C#のString.Substringメソッドを使用したプログラミングのイメージC#
この記事は約17分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、C#のString.Substringメソッドを使いこなせるようになります。

プログラミング初心者から中級者まで、文字列操作の基本から応用までを丁寧に解説していきます。

このメソッドは、文字列から特定の部分を切り出すために非常に便利で、多くのプログラムで使用されます。

本記事では、その使い方と応用例を詳しく説明し、実際のコード例を通じて理解を深めていきます。

●C#とString.Substringメソッドの基本

C#はMicrosoftによって開発された、オブジェクト指向プログラミング言語です。

.NETフレームワークと共に使われることが多く、幅広いアプリケーションの開発に対応しています。

C#では、文字列操作が頻繁に行われ、その中でもString.Substringメソッドは非常に重要な役割を果たします。

このメソッドは、文字列の特定の部分を取り出す際に使用され、プログラミングにおける基本的な技術の一つです。

○C#とは

C#は、シンプルかつ強力なプログラミング言語で、初心者にも学びやすい構造を持っています。

オブジェクト指向の概念を取り入れ、再利用可能なコードの作成や、大規模なアプリケーションの開発を容易にします。

また、MicrosoftのVisual Studioという統合開発環境(IDE)を使うことで、効率的なコーディング、デバッグ、テストが可能です。

○String.Substringメソッドの概要

String.Substringメソッドは、文字列の一部を切り出すために使用されます。

このメソッドは2つのオーバーロード、つまりバージョンが存在します。

一つは、開始インデックスのみを指定して文字列の終わりまでを取り出すもの、もう一つは、開始インデックスと長さを指定して特定の部分だけを取り出すものです。

このメソッドを使用することで、大きな文字列から必要な部分だけを簡単に抽出できます。

例えば、ユーザーの入力から特定のフォーマットのデータを取り出す場合などに非常に便利です。

●String.Substringメソッドの使い方

C#におけるString.Substringメソッドは、文字列処理において欠かせないツールです。

このメソッドを使用することで、文字列の中から特定の部分を簡単に抽出できます。

基本的な使い方は2種類あり、どちらも非常に直感的です。

まずは、文字列の特定の位置から開始して、その後の全ての文字を取得する方法です。

もう一つは、特定の位置から特定の長さの文字列を取得する方法です。

これらの方法を使いこなすことで、データの処理や解析が格段に効率的になります。

○サンプルコード1:基本的な使用方法

最も基本的なString.Substringメソッドの使用方法は、文字列の特定の位置から残り全ての文字を取り出すことです。

例えば、下記のコードでは「Hello World」から「World」という単語を取り出しています。

string example = "Hello World";
string substring = example.Substring(6);
Console.WriteLine(substring); // 出力:World

このコードでは、Substring(6)は文字列「Hello World」の6番目の文字(この場合は「W」)から始まる部分文字列を取得しています。

このように、Substringメソッドは特定の位置から文字列の終わりまでを簡単に切り出すことができるのです。

○サンプルコード2:範囲指定で部分文字列を取得

String.Substringメソッドのもう一つの使い方は、開始位置と長さを指定して部分文字列を取得する方法です。

下記の例では、「Hello World」から「ello」を取り出しています。

string example = "Hello World";
string substring = example.Substring(1, 4);
Console.WriteLine(substring); // 出力:ello

この例では、Substring(1, 4)メソッドが使用されており、1番目の文字(’H’の次の’e’)から始まる4文字の部分文字列を取得しています。

この方法を使うことで、文字列の特定のセクションを正確に抽出することが可能になります。

○サンプルコード3:エラーハンドリングの重要性

String.Substringメソッドを使用する際には、エラーハンドリングも重要です。

例えば、文字列の長さを超える範囲を指定してSubstringメソッドを呼び出すと、ランタイムエラーが発生します。

下記のコードでは、このような状況を避けるための一つの方法を表しています。

string example = "Hello";
try
{
    string substring = example.Substring(0, 10);
    Console.WriteLine(substring);
}
catch (ArgumentOutOfRangeException e)
{
    Console.WriteLine("指定された範囲が文字列の長さを超えています。");
}

このコードでは、Substring(0, 10)という呼び出しがありますが、文字列「Hello」は5文字しかないため、このコードは例外ArgumentOutOfRangeExceptionをスローします。

●String.Substringメソッドの応用例

String.Substringメソッドは、基本的な文字列操作を超えた応用例にも対応します。

プログラム内でさまざまなデータ処理に活用でき、特にフォーマットされたデータの処理や動的な文字列生成など、高度なテキスト処理において重要な役割を果たします。

例えば、日付や数値データの一部を抽出したり、ユーザーの入力に基づいて特定の形式の文字列を生成するなどの作業が、このメソッドを用いることで容易に実行できます。

○サンプルコード4:フォーマットされたデータの処理

日付や時間などのフォーマットされた文字列から特定の部分を取り出す例を考えてみましょう。

下記のコードは、日付と時刻の文字列から、年月日の部分だけを抽出しています。

string dateTime = "2023-12-13 15:30";
string date = dateTime.Substring(0, 10);
Console.WriteLine(date); // 出力:2023-12-13

このコードでは、日付と時刻を含む文字列"2023-12-13 15:30"から、年月日を表す最初の10文字をSubstringメソッドで抽出しています。

このように、フォーマットされたデータから必要な情報のみを効率的に取り出すことが可能です。

○サンプルコード5:動的な文字列生成

Substringメソッドは、動的な文字列を生成する際にも非常に便利です。

例えば、ユーザー名と日付からなる一意のIDを生成する場合、次のようなコードが考えられます。

string username = "yamada";
string currentDate = "20231213";
string userID = username.Substring(0, 3) + currentDate.Substring(2, 6);
Console.WriteLine(userID); // 出力:yam201213

この例では、ユーザー名の最初の3文字と、日付の年以外の部分を組み合わせてIDを生成しています。

このようにSubstringメソッドを使うことで、複数の文字列から必要な部分を組み合わせて新しい文字列を作成できます。

○サンプルコード6:複雑な文字列操作

より複雑な文字列操作の例として、特定のフォーマットに基づいたデータの抽出を考えます。

下記のコードでは、URLから特定のパラメータを取り出す操作を行っています。

string url = "http://example.com/page?param1=value1&param2=value2";
int paramIndex = url.IndexOf("param2=");
string param2Value = url.Substring(paramIndex + 7, url.IndexOf('&', paramIndex) - paramIndex - 7);
Console.WriteLine(param2Value); // 出力:value2

このコードでは、URL中のparam2パラメータの値を取り出しています。

まずIndexOfメソッドでparam2=の位置を見つけ、その後Substringメソッドを使用してパラメータの値を抽出しています。

このようにSubstringメソッドは、複雑な文字列の中から特定のパターンに基づいてデータを抽出する際にも非常に有効です。

○サンプルコード7:ユーザー入力の処理

ユーザーからの入力は、しばしば予期せぬ形式で提供されます。

String.Substringメソッドを用いて、このような入力から必要な情報を抽出することができます。

例えば、ユーザーが入力した全文から、特定のキーワードやフレーズを取り出すことが可能です。

下記のコードでは、ユーザーの文章から特定の単語を取り出す処理を表しています。

string userInput = "私の名前は山田太郎です。";
int startIndex = userInput.IndexOf("名前は") + 3;
int endIndex = userInput.IndexOf("です", startIndex);
string name = userInput.Substring(startIndex, endIndex - startIndex);
Console.WriteLine(name); // 出力:山田太郎

このコードでは、IndexOfメソッドを使用して「名前は」と「です」の位置を検出し、その間の文字列をSubstringメソッドで抽出しています。

このように、ユーザー入力から特定の情報を効率的に抽出することが可能になります。

○サンプルコード8:データ検証と処理

データの検証と処理は、プログラミングにおいて非常に重要な部分です。

String.Substringメソッドは、特定の形式のデータを検証し、処理する際にも役立ちます。

例えば、下記のコードは、ユーザーから入力された電話番号が特定の形式に合致しているかを検証し、必要な部分を抽出する方法を表しています。

string phoneNumber = "080-1234-5678";
if (phoneNumber.Length == 13 && phoneNumber[3] == '-' && phoneNumber[8] == '-')
{
    string areaCode = phoneNumber.Substring(0, 3);
    string localNumber = phoneNumber.Substring(4);
    Console.WriteLine("エリアコード: " + areaCode); // 出力:エリアコード: 080
    Console.WriteLine("ローカル番号: " + localNumber); // 出力:ローカル番号: 1234-5678
}
else
{
    Console.WriteLine("電話番号の形式が正しくありません。");
}

このコードでは、まず電話番号の長さとハイフンの位置を確認し、その後Substringメソッドを使用してエリアコードとローカル番号を抽出しています。

このように、String.Substringメソッドを使用することで、入力されたデータの形式を検証し、必要な部分を簡単に取り出すことができます。

○サンプルコード9:効率的な文字列処理テクニック

効率的な文字列処理において、String.Substringメソッドは非常に有用です。

特に、大量のデータを扱う際には、このメソッドを使用してデータの特定の部分だけを迅速に処理することが可能です。

下記のコード例では、複数行にわたるテキストデータから特定の行を抽出する方法を表しています。

string multiLineText = "行1\n行2\n行3\n行4\n行5";
int startLine = 2;
int endLine = 4;
string[] lines = multiLineText.Split('\n');
string extractedText = String.Join("\n", lines.Skip(startLine - 1).Take(endLine - startLine + 1));
Console.WriteLine(extractedText); // 出力:行2\n行3\n行4

このコードでは、まずSplitメソッドを使用してテキストを行ごとに分割し、その後SkipTakeメソッドを組み合わせて必要な行だけを抽出しています。

このように、String.Substringメソッドを他のメソッドと組み合わせることで、複雑な文字列操作を効率的に実行できます。

○サンプルコード10:Substringを使ったデータ解析

データ解析においても、String.Substringメソッドは有効なツールです。

特に、フォーマットされたテキストデータから特定の情報を抽出する場合に便利です。

下記のコードでは、ログファイルから特定の日時に記録されたログのみを抽出する処理を表しています。

string logData = "2023-12-01: ログ1\n2023-12-02: ログ2\n2023-12-03: ログ3";
string targetDate = "2023-12-02";
string[] logLines = logData.Split('\n');
string filteredLogs = String.Join("\n", logLines.Where(line => line.StartsWith(targetDate)));
Console.WriteLine(filteredLogs); // 出力:2023-12-02: ログ2

このコードでは、まずログデータを行ごとに分割し、その後Whereメソッドを使用して特定の日付で始まる行だけを抽出しています。

Substringメソッドを使用することで、特定のフォーマットに従ったデータから必要な情報を簡単に取り出すことができ、データ解析の効率が大幅に向上します。

●注意点と対処法

C#のString.Substringメソッドを使用する際には、いくつかの注意点があります。

特にエラー処理とパフォーマンスへの影響には注意が必要です。

適切な処理を行うことで、エラーを防ぎ、プログラムの効率を高めることができます。

○エラー処理とバリデーション

String.Substringメソッドを使用する際、最も一般的なエラーは、文字列の範囲外を参照することです。

このようなエラーを防ぐためには、文字列の長さを確認し、範囲外の参照がないことを保証するバリデーションが重要です。

下記のコードは、文字列の長さをチェックする簡単な例です。

string text = "サンプルテキスト";
int startIndex = 5;
int length = 10;

if (startIndex + length <= text.Length)
{
    string substring = text.Substring(startIndex, length);
    Console.WriteLine(substring);
}
else
{
    Console.WriteLine("指定された範囲が文字列の長さを超えています。");
}

このコードでは、Substringメソッドを呼び出す前に、startIndexとlengthの合計が文字列の長さを超えていないかをチェックしています。

これにより、範囲外の参照によるエラーを防ぐことができます。

○パフォーマンスへの影響と最適化

String.Substringメソッドは便利ですが、大量のデータや繰り返しの処理ではパフォーマンスに影響を与える可能性があります。

特に、大きな文字列から多くの小さな部分文字列を生成する場合、不要なメモリの割り当てが発生することがあります。

このような場合、StringBuilderクラスなどを使用して、効率的な文字列処理を行うことが推奨されます。

例えば、下記のコードでは、StringBuilderを使用して複数の部分文字列を結合しています。

StringBuilder builder = new StringBuilder();
builder.Append("部分文字列1");
builder.Append("部分文字列2");
builder.Append("部分文字列3");
string result = builder.ToString();
Console.WriteLine(result);

この例では、StringBuilderを使用することで、一時的な文字列オブジェクトの生成を避け、パフォーマンスを向上させています。

大量の文字列操作が必要な場合は、このようなアプローチが有効です。

●カスタマイズ方法

String.Substringメソッドを使ったカスタマイズ方法は、プログラミングの幅を広げます。

このメソッドを基にして、特定のニーズに合わせた独自の文字列操作関数を作成することが可能です。

これにより、より複雑な文字列処理や、特定のアプリケーションに最適化された処理を実現できます。

○独自の文字列操作関数の作成

独自の文字列操作関数を作成することで、特定のパターンやフォーマットに基づいた文字列処理を簡単に実行できます。

例えば、下記のコードは、カスタムの文字列切り出し関数を表しています。

string ExtractCustomString(string input, string startPattern, string endPattern)
{
    int startIndex = input.IndexOf(startPattern);
    if (startIndex == -1) return null;
    startIndex += startPattern.Length;

    int endIndex = input.IndexOf(endPattern, startIndex);
    if (endIndex == -1) return null;

    return input.Substring(startIndex, endIndex - startIndex);
}

string exampleText = "ここには特定のデータ: [重要なデータ] が含まれています。";
string extracted = ExtractCustomString(exampleText, "[", "]");
Console.WriteLine(extracted); // 出力:重要なデータ

この関数は、指定された開始パターンと終了パターンに挟まれた文字列を抽出します。

このようなカスタマイズは、特定のフォーマットを持つテキストから情報を取り出す際に特に有用です。

○String.Substringを組み合わせた応用技術

String.Substringメソッドは他の文字列処理メソッドと組み合わせて、より強力な応用技術を生み出すことができます。

たとえば、正規表現と組み合わせて複雑な文字列パターンを解析することが可能です。

ここでは、正規表現を使用して特定のパターンを含む文字列を抽出する例を紹介します。

using System.Text.RegularExpressions;

string inputText = "ユーザーID: user123, 日付: 2023-12-01";
Match match = Regex.Match(inputText, @"ユーザーID: (\w+), 日付: (\d{4}-\d{2}-\d{2})");

if (match.Success)
{
    string userId = match.Groups[1].Value;
    string date = match.Groups[2].Value;
    Console.WriteLine($"ユーザーID: {userId}, 日付: {date}");
}

このコードでは、正規表現を使用してユーザーIDと日付を抽出しています。

String.Substringメソッドと正規表現を組み合わせることで、様々なパターンの文字列処理を柔軟に行うことができます。

まとめ

この記事では、C#におけるString.Substringメソッドの基本的な使い方、応用例、注意点、さらにカスタマイズ方法について詳細に解説しました。

このメソッドは非常に柔軟であり、様々な文字列操作に利用できることがわかります。

このガイドを通して、読者の皆さんがString.Substringメソッドの潜在能力を理解し、日々のプログラミング作業に活かせることを願っています。

C#プログラミングにおける文字列操作のスキルを高めるために、是非これらの知識とサンプルコードを参考にしてください。