我正在尝试制定一些逻辑,但它尚未证明:
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
答案 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
更正了我的代码