[.NET] 文字列を文字列でSplit

C#やVB.NETで、「文字列を文字列で分割」したい場合、少し特殊な書き方になる。

文字列を「文字」で分割したい場合は、そんなに考えないが、「文字列」の場合は、配列に入れて、オプションを指定する必要がある。

C#では、下記のように。

var msg = "Microsoft###Google###Apple";
var msgs = msg.Split(new string[]{"###"}, System.StringSplitOptions.None);

VBでは、下記のように書くか、後述するSplit関数を使う。

Dim msg As String = "Microsoft###Google###Apple"
Dim msgs As String() = msg.Split(New String() {"###"}, StringSplitOptions.None)

おそらくは、こののやり方でほとんど事足りると思う。

VBの場合、やや注意が必要。
何も考えずに、下記のように書くと、 先頭文字だけをデリミタとして、通常は3つに分割してほしいところだが、#一つについて分割するので、7つに分割される。
C#だと、怒られるので、その心配はない。

Dim msg As String = "Microsoft###Google###Apple"; 
Dim msgs As String() = msg.Split("###");

複数のデリミタ

ちなみに、配列に文字列を複数入れれば、それらがすべてデリミタになり、どれか一つでもあれば分割される。
また、後ろにつけるオプションはNone以外にもRemoveEmptyEntriesが選べ、これは、文字列が空の場合に配列を返さなくなる。

var msgs = msg.Split(new string[]{"@@@","###"}, StringSplitOptions.RemoveEmptyEntries);

他に、返る配列数を限定するオプションだったり、複数の文字列で分解する場合のヒットする順番の仕様({“a”,”ab”}だとどうなるのか等)とかは、MSDNで。

Split関数

Visual Basic にはSplit関数があり、こっちは普通に文字列、文字列だけで分割してくれる。
VBは素直にこちらを使っていたほうが無難かもしれない。オブジェクト指向的には少し気持ち悪いが・・・。
msgs = Split(msg, “###”)

Split関数
Split関数は、VB.NET標準だが、C#でもライブラリを参照すれば使える。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>