5

文字列変数があります。これは基本的に、それぞれ 1 つのスペースで区切られた 3 つの文字列です。これらの 3 つの文字列の長さは異なる場合があります。お気に入り

string line="XXX YY ZZ";

ここで、私の文字列変数lineが 3 つの文字列で構成され、最初の文字列と 2 番目の文字列が 1 つではなく 2 つのスペースで区切られていることが時々起こります。

string line="XX  YY ZZ";

私がやりたかったのは、3 つの文字列を文字列配列に格納することです。

string[] xここx[0]="XXX"x[1]="YY"、、x[2]="ZZ"

スプリット機能を使ってみました。

string[] allId = line.Split(' ');

2番目のケースではなく、最初のケースで機能します。これを行うためのきちんとした簡単な方法はありますか?

4

3 に答える 3

11

結果から空の文字列を削除するだけです:

var allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
于 2012-10-16T16:15:41.423 に答える
8

正規表現分割を使用します。なんで?スペースを表す文字はスペースだけではありません。タブもあります。

\s+パターンで正規表現分割を使用することにより、その操作はタブとスペースが混在していてもすべてのスペースの組み合わせを消費するため、テキストを返すことができます。

var result = Regex.Split("XX  YYY    ZZZ", @"\s+");

// "XX", "YYY", "ZZZ" returned in array

Linqpad 結果画像キャプチャ

パターンのまとめ

\s は、文字以外、スペース、またはタブを意味します。 + それが言った後、私は少なくとも1つを期待していますが、複数が見つかる可能性があります.

そのため、正規表現プロセッサが一致として分割する 1 つ以上のスペースを探すことを意味します+\sマッチ間のすべてが返されます。

于 2012-10-16T16:16:02.093 に答える
2

追加のパラメーターを指定して split メソッドを使用します。

.splitメソッドはここに文書化されています

2 番目のパラメーターoptionsは型であり、ここStringSplitOptionsで定義されています。

このパラメーターの 2 つの可能な値はStringSplitOptions.None、 とStringSplitOptions.RemoveEmptyEntriesです。

したがって、単純に次のようにします。

string[] allId = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

そして、あなたはあなたが欲しいです!簡単。

于 2012-10-16T16:19:38.577 に答える