c#拆分字符串2.逐个字母

时间:2017-09-11 23:53:31

标签: c# string split

我需要将我的字符串拆分为2,每个变量一个字母。

示例:string =“ABCDEFGHIJ” name1:ACEGI name2: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中显示相同的文字。

4 个答案:

答案 0 :(得分:1)

您应该使用++i代替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]表达相同的项目之后递增{.1}}。

答案 1 :(得分: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());

答案 2 :(得分:1)

您还可以使用模运算符(%)来确定索引是偶数还是奇数,并将偶数索引放在第一个数组中,将奇数索引放在第二个数组中:

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

如果您希望增加i正文中的for,则必须对s.Length重复检查(正如我们在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]);
}

答案 3 :(得分: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));