Contents
【C#】Substringでエラーを回避する方法
C#のSubstringメソッドを使用すると、文字列の一部を切り取ることができます。
Substringメソッドは、以下のとおり使用します。
- 第1引数のみ指定した場合、指定したインデックス以降の文字列を切り出します。
- 2つ引数を指定した場合は、第一引数で指定したインデックスから第二引数で指定したインデックスの値まで文字列を切り取ります。
一方で、切り取ろうとする値がそもそも存在しない(null)の場合や、切り取ろうとする文字列の範囲の指定を誤った場合は
「System.NullReferenceException」や「System.ArgumentOutOfRangeException」
が起きます。
例えば以下のようなプログラムの場合は、「NullReferenceException」が発生します。
string 文字列 = null;
// 1文字目移行を切取り
string 切取後 = 文字列.Substring(1);
Console.WriteLine(切取後);
//実行結果
System.NullReferenceException
また、指定範囲を超える場合は範囲外のエラーであることを示す「System.ArgumentOutOfRangeException」が発生します。
例えば以下のようなプログラムです。
string 文字列 = "文字"; // 1文字目移行を切取り string 切取後 = 文字列.Substring(2, 3); Console.WriteLine(切取後); //実行結果 System.ArgumentOutOfRangeException: 'インデックスおよび長さは文字列内の場所を参照しなければなりません。
上記のエラーを要約すると長さが2なのに2~3文字目を切り取ろうとしてるためエラーとなったことを示してます。(System.ArgumentOutOfRangeException: ‘インデックスおよび長さは文字列内の場所を参照しなければなりません。)
いずれにしても、nullや指定範囲外であれば切取処理を実施すべきでなく、条件分岐等で処理を行わないなどにて、エラーを回避できます。
「NullReferenceException」の回避nullの場合は処理をしない条件式を追加
nullを切り取ろうとした場合は、「NullReferenceException」が発生し、システムエラーとなります。
そもそも、nullの場合はSubstring処理を実施すべきでなく、null以外の場合に実施するとすればよいです。
具体的には以下のように実装します。
string 文字列 = null; // null以外の場合に文字列の切取処理を実施 if (null != 文字列) { string 切取後 = 文字列.Substring(1); Console.WriteLine(切取後); } //実行結果
<変数>文字列の値はnullのため、if (null != 文字列) の判定ではfalseとなり、切取処理が実施されません。
切取を実施する変数にnullが入り得るのであれば、判定処理を考慮する必要があります。
「ArgumentOutOfRangeException」の回避方法:切取対象の文字数をあらかじめ取得し、判定処理として活用する
「ArgumentOutOfRangeException」は指定範囲外の文字列を切り取りを実施する際に発生します。
例えば5文字以降を切り取るなどとすれば、5文字より少ない場合は、切取対象が存在しないためエラーとなります。
回避方法は切取対象の文字列の長さをCountメソッドで取得し、切取を実施するかの判定処理を行います。
string 文字列 = "文字"; int 文字列LEN = 文字列.Count(); if (文字列LEN >= 3) { string 切取後 = 文字列.Substring(2, 3); Console.WriteLine(切取後); } //実行結果
上記プログラムでは2~3文字目を切り取りたいので、最低3文字必要です。
そのため、<変数>文字列の長さを取得し、最低3文字以上であるかどうか判定してあげれば回避することができます。
コメントを残す