2017-09-11 6 views
1

2つの文字列を各変数に1文字ずつ分割する必要があります。C#split string in 2。文字の手紙

例:文字列= "ABCDEFGHIJ" NAME1:Acegiの 名2:BDFHJ

私がこれまでに行わ:

 var builderM = new StringBuilder(); 
     var builderK = new StringBuilder(); 

     for (int i = 0; i < s.Length; i++) 
     { 
      builderM.Append(s[i]); 
      builderK.Append(s[i++]); 
     } 

     txtM.Text = builderM.ToString(); 
     txtK.Text = builderK.ToString(); 

しかし、あなたがすべき2

+3

文字列のサイズが奇数の場合、コードは範囲例外のうち、インデックスをスローします、あなたは、単に '' 'builderK.Append(S [++ i])と前の長さに別のチェックを追加することができ;' ' ' –

答えて

1

での表示と同じテキストをi++

for (int i = 0; i < s.Length; i++) 
    { 
     builderM.Append(s[i]); 
     if(i + 1 < s.Length) // to prevent IOR exception when count is odd. 
      builderK.Append(s[++i]); // pre increment. 
    } 
の代わりに ++iを使用してください理由は、 i++がポストインクリメントされているという理由が

です。つまり、は式s[i++]の後にインクリメントされ、s[i]と同じアイテムが与えられます。

+0

私は" ABCD "を入力するとうまくいきますが、" ABD "という文字を3文字だけ入れると、++ i行にエラーが発生します。助け、友人のためのTnks。 – Brugo

1

別のアプローチは、奇数フィルタリングするためにLINQを使用することであろうとさえ何かのように、二つの文字列のインデックス:

var even = new string(input.Where((c, idx) => idx % 2 == 0).ToArray()); 
var odd = new string(input.Where((c, idx) => idx % 2 != 0).ToArray()); 
1

また、インデックスが偶数か奇数であるかどうかを判断するために剰余演算子(%)を使用することができます、2つ目の最初の列と奇数のインデックスでも、インデックスを置く:あなたはむしろfor体内にiをインクリメントしたい場合

for (int i = 0; i < s.Length; i++) 
{ 
    if (i % 2 == 0) builderM.Append(s[i]); 
    else builderK.Append(s[i]); 
} 

、あなたはに対してチェックを繰り返す必要が(我々がforの条件で行っているように)。また、あなたはどちらかにする必要があります前の行(iは時間にインクリメントされるように)にポストインクリメントを移動したり、前の増分を使用します。

// Move post-increment to previous line example: 
for (int i = 0; i < s.Length; i++) 
{ 
    builderM.Append(s[i++]); 
    if (i < s.Length) builderK.Append(s[i]); 
} 

// Use a pre-increment example: 
for (int i = 0; i < s.Length; i++) 
{ 
    builderM.Append(s[i]); 
    if (++i < s.Length) builderK.Append(s[i]); 
} 
1

パフォーマンスが問題でない場合は、あなたが使用することができますLINQ:

var name1 = String.Join(String.Empty, str.Where((v, i) => i % 2 == 0)); 
    var name2 = String.Join(String.Empty, str.Where((v, i) => i % 2 == 1)); 
+0

こんにちは、2つの質問:なぜ 'string.Join'ですか?そして、なぜパフォーマンスの発言? – Stefan

+0

'string.join'は' toarray'と同じですが、パフォーマンスに関しては、単純なforループを使用した場合、LINQではなくLINQで2つのループ( 'where') – Mhd

関連する問題