0

通常、次のように文字列を分割すると、 Hi,One,Two3 つの区切り項目が返されます。

ただし、最後の項目に追加のカンマが必要な場合Hi,One,Two,は、4 つの項目が得られます。

文字列を文字列配列に分割していますが、文字列の末尾に余分な区切り文字があるため、配列項目の長さが不均一であることがわかりました。

string test = "[one]\t\t\t[two]\t\t\t";
string[] testArr = test.Split(new char[] { '\t' }, StringSplitOptions.None);

結果は次のとおりです。

[0] = "[one]"
[1] = ""
[2] = "" <- 4 番目の項目がありません
[3] = "[two]"
[4] = ""
[5] = ""
[6 ] = "" <- 4 番目の項目があります

最後のセグメントを除くすべてのセグメントに 4 番目のコンマを追加する必要がない方法はありますか?

編集:

確かに、このコードを簡単に使用できます。

string test = "[one]\t\t\t\t[two]\t\t\t";
string[] testArr = test.Split(new char[] { '\t' }, StringSplitOptions.None);

そして理想的な結果を得る:

[0] = "[1]"
[1] = ""
[2] = ""
[3] = ""
[4] = "[2]"
[5] = ""
[6] = ""
[7 ] = ""

この質問を超えた目的のために、最後の区切り文字の末尾のコンマが1つ少なくなるように文字列を微調整するのではなく、末尾の区切り文字を等しくできることを望んでいました。

4

3 に答える 3

2

最後のセグメントを除くすべてのセグメントに 4 番目のコンマを追加する必要がない方法はありますか?

String.Split正常に機能するため、文字列に追加のインデックスを生成するには、別のコンマが必要です。2 つのオプションがあります

  1. あなたの前にコンマを入れてくださいSplit
  2. 後に空の要素を追加しますSplit

これには、質問に含まれていないことがもっとあると思います。

たとえば、あなたは と に参加[one],,,してい[two],,,ますか? その場合は、それらをコンマ区切り記号で結合して、レンダリングすることをお勧めします[one],,,,[two],,,(余分なコンマに注意してください)。カンマを先に挿入してみてください。

最大の疑問は、配列内で空の文字列を持ち歩くことに関心があるのはなぜですか? リストを使用し、必要に応じて余分な文字列を挿入します。空を運ぶのではなく、実際に必要なときにリストに文字列を追加するだけです。または、文字列のコレクションではなくオブジェクトを使用します。

于 2012-09-10T04:50:41.377 に答える
1

私はこのコードをやりたくありません、そして私は最後のコンマを取り除くことができません:

string.TrimEndを使用して末尾のコンマを削除し、後でコンマに基づいて文字列を分割します。

string test = "[one],,,,[two],,,";
test = test.TrimEnd(',');
string[] testArr = test.Split(new char[] { ',' }, StringSplitOptions.None);

または1つのステートメントで:

    string[] testArr2 = "[one],,,,[two],,,"
                               .TrimEnd(',')
                               .Split(new char[] { ',' }, StringSplitOptions.None);

編集した質問に基づいて、現在のコードで探している結果が得られるはずです。次のスクリーンショットを見てください

ここに画像の説明を入力してください

于 2012-09-10T04:35:21.087 に答える
0
string test = "[one]\t\t\t[two]\t\t\t";
string[] arrUnEven = test.Split(new char[] { '\t' }, StringSplitOptions.None);

test = test.TrimEnd(new char[] { '\t' });
test = test + new String( '\t',2);
string[] arrEven = test.Split(new char[] { '\t' }, StringSplitOptions.None);
于 2012-09-10T05:42:31.490 に答える