2016-02-08 4 views
3

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность перебирать строку, возвращая 5 символов после позиции индекса, а затем начиная с 5 символов после.C# подстрока вне диапазона

Однако, когда осталось меньше 5 символов, возникает ошибка вне диапазона, я думал, что он просто распечатает оставшиеся символы строки.

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

Как я могу его распечатать, что осталось от строки, когда осталось меньше 5?

+1

[согласно документации] (https: // msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx), он выдаст исключение, если 'length указывает позицию не в этом экземпляре.' –

ответ

2

Вы можете 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); 
} 

Не употребляйте выше, если у вас есть много различных строки большой длины - string сек неизменны, так называя Substring() дважды на каждой итерации приводит дополнительную строку в куче каждый раз - довольно calculate the difference between Length and index like suggested by Xerillio

3

Заменить строку 3 ФП кода ж Ith это:

string subString = string1.Substring(i, string1.Length - i < 5 ? string1.Length - i : 5);

+3

Правильно, ваш ответ нуждается в пояснительном тексте. Почему это работает? Какую проблему он решает? В чем причина этой проблемы? Однострочные ответы только на код непрозрачны. – Corey

2

Вы можете использовать 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); 
} 

Это дает:

 
ghuit 
ghtru 
ighr 
Смежные вопросы