注意:ここでは、.NET Framework 1.1以前について説明しています。.NET Framework 2.0からはStringクラスのSplitメソッドに文字列も指定できるようになりましたので、この記事の方法を使う必要はありません。
StringクラスのSplitメソッドは区切り文字としてChar型でしか指定できないため、文字列で区切り文字を指定できるVBのSplit関数とは大きく異なります。ではVBのSplit関数のように区切り文字を文字列(String型)で指定できるようにするにはどうすればよいのでしょうか?
これにはMicrosoft.VisualBasic.StringsクラスのSplitメソッドを使う方法と、Regexクラス(System.Text.RegularExpression名前空間)のSplitメソッドを使う方法が考えられます。しかしこれらはかなり処理速度が遅いです。このような方法を使わずに、分割したい文字列内の区切り文字(列)をいったん適当な1文字(分割したい文字列内の分割したくない位置に絶対現れることのない文字)に置換した後、StringクラスのSplitメソッドにより分割した方が圧倒的に速いケースも多いようです。
次のサンプルではRegex.Split、VisualBasic.Strings.Split、string.Splitそれぞれのメソッドを使ってString型データを改行文字列("\r\n")で分割したときにかかった時間を計測しています。
//いろいろな方法でstring型データを改行文字列("\r\n")で分割し //その時間を計る //テキストファイルをstrTextに読み込む string strFileName = "REDIST.TXT"; System.IO.FileStream fs = new System.IO.FileStream(strFileName, System.IO.FileMode.Open); System.IO.StreamReader sr = new System.IO.StreamReader(fs, System.Text.Encoding.GetEncoding(932)); string strText = sr.ReadToEnd(); sr.Close(); int t1, t2, t3; string [] s1, s2, s3; //Regex.Splitで分割する t1 = System.Environment.TickCount; s1 = System.Text.RegularExpressions.Regex.Split(strText, "\r\n"); t1 = System.Environment.TickCount - t1; //VisualBasic.Strings.Splitで分割する t2 = System.Environment.TickCount; s2 = Microsoft.VisualBasic.Strings.Split(strText, "\r\n", -1, Microsoft.VisualBasic.CompareMethod.Binary); t2 = System.Environment.TickCount - t2; //string.Splitで分割する t3 = System.Environment.TickCount; s3 = strText.Replace("\r\n", "\n").Split('\n'); t3 = System.Environment.TickCount - t3; //結果を表示 Console.WriteLine("Regex.Split: {0}", t1); Console.WriteLine("VisualBasic.Strings.Split: {0}", t2); Console.WriteLine("string.Split: {0}", t3); Console.WriteLine("Lines Count: {0}", s3.Length); //表示例 //Regex.Split: 521 //VisualBasic.Strings.Split: 1452 //string.Split: 181