C#やVB.NETで、「文字列を文字列で分割」したい場合、少し特殊な書き方になる。
文字列を「文字」で分割したい場合は、そんなに考えないが、「文字列」の場合は、配列に入れて、オプションを指定する必要がある。
C#では、下記のように。
1 2 |
var msg = "Microsoft###Google###Apple"; var msgs = msg.Split(new string[]{"###"}, System.StringSplitOptions.None); |
VBでは、下記のように書くか、後述するSplit関数を使う。
1 2 |
Dim msg As String = "Microsoft###Google###Apple" Dim msgs As String() = msg.Split(New String() {"###"}, StringSplitOptions.None) |
おそらくは、こののやり方でほとんど事足りると思う。
VBの場合、やや注意が必要。
何も考えずに、下記のように書くと、 先頭文字だけをデリミタとして、通常は3つに分割してほしいところだが、#一つについて分割するので、7つに分割される。
C#だと、怒られるので、その心配はない。
1 2 |
Dim msg As String = "Microsoft###Google###Apple"; Dim msgs As String() = msg.Split("###"); |
複数のデリミタ
ちなみに、配列に文字列を複数入れれば、それらがすべてデリミタになり、どれか一つでもあれば分割される。
また、後ろにつけるオプションはNone以外にもRemoveEmptyEntriesが選べ、これは、文字列が空の場合に配列を返さなくなる。
1 |
var msgs = msg.Split(new string[]{"@@@","###"}, StringSplitOptions.RemoveEmptyEntries); |
他に、返る配列数を限定するオプションだったり、複数の文字列で分解する場合のヒットする順番の仕様({“a”,”ab”}だとどうなるのか等)とかは、MSDNで。
Split関数
Visual Basic にはSplit関数があり、こっちは普通に文字列、文字列だけで分割してくれる。
VBは素直にこちらを使っていたほうが無難かもしれない。オブジェクト指向的には少し気持ち悪いが・・・。
msgs = Split(msg, "###")
Split関数
Split関数は、VB.NET標準だが、C#でもライブラリを参照すれば使える。