每两个字符后添加一个空格,并在每个字符的前面添加一个字符

时间:2011-07-07 19:05:25

标签: c# string

我想在每两个字符后添加一个空格,并在每个字符前添加一个字符。

这是我的代码:

string str2;
str2 = str1.ToCharArray().Aggregate("", (result, c) => result += ((!string.IsNullOrEmpty(result) && (result.Length + 1) % 3 == 0) ? " " : "") + c.ToString());

我用一个空格分隔每两个字符没有问题,但我怎么知道分隔的字符串是否有一个单独的字符,并在该字符的前面添加一个字符?

我明白我的问题令人困惑,因为我不确定如何把我想要的东西放在文字中...... 所以我只举一个例子:

我有这个字符串:

0123457

用空格分隔每两个字符后,我会得到:

01 23 45 7

我想在7前面添加一个6。

注意:数字取决于用户的输入,因此并不总是相同。

感谢。

4 个答案:

答案 0 :(得分:20)

[TestMethod]
public void StackOverflowQuestion()
{
    var input = "0123457";
    var temp = Regex.Replace(input, @"(.{2})", "$1 ");
    Assert.AreEqual("01 23 45 7", temp);
}

答案 1 :(得分:4)

尝试这样的事情:

static string ProcessString(string input)
{
    StringBuilder buffer = new StringBuilder(input.Length*3/2);
    for (int i=0; i<input.Length; i++)
    {
        if ((i>0) & (i%2==0))
            buffer.Append(" ");
        buffer.Append(input[i]);
    }
    return buffer.ToString();
}

当然,您需要添加一些关于额外数字的逻辑,但基本思路应该从上面清楚。

答案 2 :(得分:2)

如果我理解你的要求,可以试试,

String.Length % 2

如果结果为0,则完成第一次迭代,如果没有,只需添加最后一次的字符。

答案 3 :(得分:1)

我认为这就是你要求的

string str1 = "3322356";
            string str2;

            str2 = String.Join(" ", 
                str1.ToCharArray().Aggregate("",
                (result, c) => result += ((!string.IsNullOrEmpty(result) &&
                    (result.Length + 1) % 3 == 0) ? " " : "") + c.ToString())
                    .Split(' ').ToList().Select(
                x => x.Length == 1 
                    ? String.Format("{0}{1}", Int32.Parse(x) - 1, x) 
                    : x).ToArray());

结果是“33 22 35 56”