我遇到的问题是我需要能够循环一个字符串,在索引的位置后返回5个字符,然后在5个字符之后。
但是当剩下少于5个字符时会发生超出范围的错误,我认为它只会打印字符串的剩余字符。
string string1 = "ghuitghtruighr";
for (int index = 0; index < string1.Length; index += 5)
{
string subString = string1.Substring(i, 5);
Console.WriteLine(subString);
}
当剩下的数量少于5时,如何让它打印出字符串的左边?
答案 0 :(得分:3)
您可以从索引到字符串末尾string string1 = "ghuitghtruighr";
for (int index = 0; index < string1.Length; index += 5)
{
string subString = string1.Substring(index);
if(subString.Length > 5)
subString = subString.Substring(0, 5);
Console.WriteLine(subString);
}
,然后检查生成的子字符串是否包含超过5个字符:
string
如果你有很多不同长度的字符串,那么就不要做上面的事情 - Substring()
s是不可变的,所以每次迭代调用~
两次会导致每次堆上有一个额外的字符串 - 而不是http://codepen.io/prowseed/pen/rxQwbQ
答案 1 :(得分:3)
用以下代码替换OP代码的第3行:
string subString = string1.Substring(i, string1.Length - i < 5 ? string1.Length - i : 5);
答案 2 :(得分:3)
您可以使用LINQ .Skip(...)
&amp; .Take(...)
运营商喜欢这样:
for (int index = 0; index < string1.Length; index += 5)
{
string subString = new String(string1.Skip(index).Take(5).ToArray());
Console.WriteLine(subString);
}
这给出了:
ghuit ghtru ighr