在一段时间后在换行符周围分割字符串

时间:2013-11-19 13:11:00

标签: c# string

我正在尝试制定一些逻辑,但它尚未证明:

string s = "1234567877y";
StringBuilder sb = new StringBuilder(s);
for (int i = 5; i <= s.Length + (s.Length / 5 ); i += 5 + (s.Length / 5)  )
{
     sb.Insert(i, Environment.NewLine);
}
Console.WriteLine(sb.ToString());
Console.ReadKey();

输出应为:

12345
67877
y

StringBuilder contain:  "12345\r\n67877\r\ny"

但如果我改变输入字符串我没有得到理想的结果。我可以在这做什么或建议其他方式。

编辑: 如果我改变

string s = "1234567877y3434";

输出

12345
67877y
3434

2 个答案:

答案 0 :(得分:7)

另一种简洁的方法是使用GroupBy

string s = "1234567877y";
IEnumerable<string> groups = s.Select((c, index) => new{ c, index })
    .GroupBy(x => x.index / 5)
    .Select(xg => string.Join("", xg.Select(x => x.c)));

string result = string.Join(Environment.NewLine, groups);

这是一种方法StringBuilder效率更高:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
    if ((i+1) % 5 == 0)
        sb.Append(s[i]).Append(Environment.NewLine);
    else
        sb.Append(s[i]);
}

答案 1 :(得分:2)

我会这样做:)

        string s = "1234567877y3434";

        for (int i = 5; i < s.Length; i += 5 + Environment.NewLine.Length)
        {
            s = s.Substring(0, i) + Environment.NewLine + s.Substring(i, s.Length - i);
        }

编辑:我使用来自Chris的suggstes使用Environment.NewLine而不是\ r \ n

更正了我的代码