每隔一段时间,在换行符周围拆分字符串



我正在尝试制作一些逻辑,但它还不能完全证明:

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:  "12345rn67877rny"

但如果我改变了输入字符串,我不会得到想要的结果。我可以在这里做什么,或者建议其他方法。

编辑:如果我更改

string s = "1234567877y3434";

输出将是

12345
67877y
3434

另一种简洁的方法是使用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]);
}

我会这样做:)

        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的suggestion更正了我的代码,使用Environment.NewLine而不是

最新更新