C#子字符串超出范围

Ker*_*ros 6 c# substring

我遇到的问题是我需要能够遍历字符串,在索引位置之后返回5个字符,然后在之后开始5个字符。

但是,当剩余少于5个字符时,会发生超出范围的错误,我认为它只会打印字符串的其余字符。

string string1 = "ghuitghtruighr";
for (int index = 0; index < string1.Length; index += 5)
{
    string subString = string1.Substring(i, 5);
    Console.WriteLine(subString);
}
Run Code Online (Sandbox Code Playgroud)

当剩余的内容少于5时,如何获取它来打印字符串的剩余内容?

Eni*_*ity 6

您可以像这样使用LINQ .Skip(...).Take(...)运算符:

for (int index = 0; index < string1.Length; index += 5)
{
    string subString = new String(string1.Skip(index).Take(5).ToArray());
    Console.WriteLine(subString);
}
Run Code Online (Sandbox Code Playgroud)

这给出了:

ghuit
ghtru
igh


Mat*_*sen 3

您可以Substring()从索引到字符串末尾,然后检查结果子字符串是否包含超过 5 个字符:

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);
}
Run Code Online (Sandbox Code Playgroud)

如果您有许多长度不同的字符串,请不要执行上述操作 - strings 是不可变的,因此Substring()每次迭代调用两次都会导致每次在堆上产生一个额外的字符串 - 而是像 Xerillio 建议的那样计算长度和索引之间的差异