Я пытаюсь:
1 string pal = "Juan 1David 1Correa"; 2 StringBuilder sb = new StringBuilder(pal); 3 Console.writeline( sb.ToString(0,9) ); 4 Console.writeline( sb.ToString(10,14) ); 5 Console.writeline( sb.ToString(15,26) );
Но в 4 строке выдает исключение.
Почему?
Второй аргумент StringBuilder.ToString(int, int) представляет длину желаемой подстроки, а не ее конечный индекс.
StringBuilder.ToString(int, int)
Извлекает подстроку из этого экземпляра.Подстрока начинается в указанной символьной позиции, а имеет указанную длину.
Например, последний оператор, вероятно, должен быть:
Console.WriteLine(sb.ToString(15, 12));
В другомпримечание: если все, что вам нужно, это получить подстроки из исходной строки, вы можете просто использовать метод String.Substring(int, int).
String.Substring(int, int)
Второй параметр это длина, поэтому он должен быть
Console.writeline( sb.ToString(10,5) );
В документах четко указано, что ArgumentOutOfRangeException будет выброшено, когда "сумма startIndex и length больше длины текущего экземпляра."
ArgumentOutOfRangeException
Когда я запускаю это, исключение выдается в строке 5, что имеет смысл, так как во входной строке недостаточно символов, чтобы сгенерировать 26 символов, начиная с 15.
Второй аргумент - это длина, а не «конечный символ». Не может найти 14 символов, начиная с 10-го - отсюда ошибка.
Второй параметр - длина, но не последний индекс. Так что в вашем случае 15 + 26 = 41, что выходит за пределы.
Пожалуйста, проверьте, чтобы ваша строка содержала пробелы внутри нее, а не tab символов. Это единственная причина, по которой вы можете иметь исключение в строке 4 . Но даже если ваша строка содержит пробелы, у вас будет исключение в строке 5 , потому что длина строки - 26, а не индекс последнего символа.
Метод StringBuilder.ToString работает не так, как вы ожидаете. Параметры:
StringBuilder.ToString
Итак, вы начинаете с индекса 15 и пытаетесь получить следующие 26 символов, что выходит за пределы длины строки.
Документацию можно найти здесь .
Прежде всего, вы должны задокументировать нам, какое исключение вы получите, вместо того, чтобы оставить нас в неведении, чтобы попытаться выяснить это сами, тогда, как догадка, я бы сказал, что ваша строка не содержит более 24 символов ...