C#文字列から指定した部分を取得するSubstringの使い方

Substringメソッドとは
Substringメソッドの使い方
Substringメソッドのオーバーロード
Substringメソッドの使用例
終わりに

Substringメソッドとは

Substringメソッドとは、指定した位置から文字列を取得することができます。Systemクラスのメソッドなので、using System;とすることで、使用することができます。

Substringとは、部分文字列という意味があります。

Substringメソッドの使い方

“文字”.Substring( i )とすることで、文字のi番目から文字列を取得してきます。
string.Substring( int );
※Substringの指定番号は0スタートです。

using system;

string str = "abcdeABCDE";

string substr = str.Substring(5);
// ABCDE

Substringのオーバーロード

Substringにはオーバーロードが定義されているので、目的に合った引数を渡します。このメソッドに2つのパターンしかなく、どちらも使用頻度が高いので、覚えておくと便利です。
公式ページはこちら
※引数については、こちらの記事を参照してください。
※オーバーロードについては、こちらの記事を参照してください。

Substring( int );
Substring( int, int );

using system;

string str = "abcdeABCDE";

string substr = str.Substring(1, 4);
// bcde

引数が1つの場合は、指定した位置から文字の終わりまで取得することができました。引数を2つ渡すと、1つ目に指定した位置から、2つ目に指定した位置までの文字を取得することができます。

1番目の位置がbに当たるので、4番目のeまで取得します。その結果bcdeが出力されます。

n番目以降の文字を取得したい時には、nを指定します。
n番目からx番目までの文字を取得したい時には、nとxを指定するだけで解決できます。

Substringメソッドの使用例

このメソッドは、IndexOfメソッドと組み合わせて使用することが多いです。2つを組み合わせることで、雑にたくさんのデータに対応することができるようになります。
IndexOfメソッドについてはこちら。

例えば、Amazonからのメールを使って、購入金額を管理したい!と考えたとします。
Amazonからのメールは、自動送信メールなのでフォーマットが決まっています。メール本文には、「注文合計:¥1,000円」と書じゃれていて、”注文合計”が絶対に書かれています。2つのメソッドだけで実行するとこのようになります。

using system;

string message = "....\r\n....注文合計:¥1,000円\r\n......";

int index = message.IndexOf("注文合計:");
//注文合計の開始位置のIndexを取得します。

string orderOnwords = message.Substring(index);
//注文合計以前の文字を排除し、必要になる注文合計以降を取得します。

int end = orderOnwords.IndexOf("\r\n");
//注文合計金額の後ろの改行コードを取得します。\r\nは改行コードです。

string orderSum = orderOnwords.Substring(5, end);
//¥1,000円 を取得できます。

まず、注文合計:の位置を取得します。メール本文で同じ単語が存在する場合は、別の方法で実装する必要があります。
取得した注文合計:以前の文字は使わないので、以降の文字だけを取得します。(注文合計:¥1,000\r\nお支払方法…)
\r\nは改行コードを示すので、注文合計の行だけを取得することができるようになります。(注文合計:¥1,000円)
最後の行の5を選択している理由は、「注文合計:」が5文字で、金額のデータだけが欲しいからです。

上記のような流れで、たった2つのメソッドでメール本文から金額を取り出すことができます。このように、IndexOfとSubstringメソッドは汎用性が高く組み合わせると、かなり便利になります。
メールのデータを取得する方法などについては、基礎的な記事が終わってから書こうと思いますので、お待ちください。

終わりに

Substringメソッドの使い方は理解できたでしょうか?私自身、未経験からエンジニアを目指して勉強をして転職をしましたがもっとポイントを押さえて書いてくれたらよいのに!!と感じるブログも多く存在しました。そんな部分も解消できるようなブログを書いていくつもりです。
まだ更新が足りずに、別の記事生成は追い付いていませんが、少しずつ更新していくつもりなので、お待ちください!