我正在尝试制作一些逻辑,但它还不能完全证明:
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而不是