C#で、ある文字列から指定した箇所を切り出す方法を紹介します。
string文字列から指定箇所を切り出す方法|String.Substring()を使った方法
例えば「あいうえお」から「うえお」を切り出したいという場合。
サンプルソースを以下。
1 2 3 4 5 6 7 8 | private void TestFunc() { string text = "あいうえお"; string substring = text.Substring(3); Debug.WriteLine(substring); } |
ポイントは
text.Substring(3)
StringのSubstring()を使う事で、引数で指定した位置(インデックス)からの、文字列を取得可能となります。
今回の例では、Substring(3)と「3」を指定しているので、インデックス3の「え」以降が取得できます。
つまり「え」以降なので、「えお」が取得できます。
今度は、"abcde" で見てみましょう。
1 2 3 4 5 6 7 8 | private void TestFunc() { string text = "abcde"; string substring = text.Substring(3); Debug.WriteLine(substring); } |
といっても、先ほどと同じです。
インデックス3以降の「de」を切り出すことが可能となります。
切り出したい文字列の位置(インデックス)が分かっている場合は、Substringが活躍してくれます!
ちなみに、
「Substring(3, 2);」のように、第二引数で切り取る文字数を指定することもできます。
上記の例だと、Index3から長さ2つ分の文字列を切り出す、という動作になります。
string文字列から指定箇所を切り出す方法|IndexOfで指定した文字列以降を切り出す方法
ある文字列に含まれる、文字列以降を切り出したい!という場合は、IndexOfと組み合わせると便利です。
たとえば以下。
1 2 3 4 5 6 7 8 | private void TestFunc() { string text = "あいうえお"; int index = text.IndexOf("え"); string substring = text.Substring(index); } |
「あいうえお」という文字列の中から、「え」を探して、それ以降の文字列を取得したい場合。
この場合だと、indexに3が取得できます。
Substringでインデックス3以降の文字列を取得できる、となります。
ここで注意したいのが、IndexOfで期待した文字列が見つからなかった場合。
この場合、Indexには「-1」が返ります。そして、そのIndexを使ってSubstringすると以下のような例外が発生します。
不具合の原因になるので、IndexOfの戻りはしっかりと判定したいところです。
以下のようにすると良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private void TestFunc() { string text = "あいうえお"; int index = text.IndexOf("か"); if (0 <= index) { string substring = text.Substring(index); } else { // 見つからなかった場合の処理 } } |
IndexOfの戻り値が、0以上であるか(見つかったか?)をしっかりと判定するようにします。
まとめ
string文字列から指定箇所を切り出すには、「Substring」を活用しよう。
IndexOfで指定した文字列以降を切り出す方法も良く使われ、とても便利