SubString StringBuilder c # - PullRequest
       14

SubString StringBuilder c #

7 голосов
/ 15 февраля 2011

Я пытаюсь:

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 строке выдает исключение.

Почему?

Ответы [ 9 ]

26 голосов
/ 15 февраля 2011

Второй аргумент StringBuilder.ToString(int, int) представляет длину желаемой подстроки, а не ее конечный индекс.

Извлекает подстроку из этого экземпляра.Подстрока начинается в указанной символьной позиции, а имеет указанную длину.

Например, последний оператор, вероятно, должен быть:

Console.WriteLine(sb.ToString(15, 12));

В другомпримечание: если все, что вам нужно, это получить подстроки из исходной строки, вы можете просто использовать метод String.Substring(int, int).

3 голосов
/ 15 февраля 2011

Второй параметр это длина, поэтому он должен быть

Console.writeline( sb.ToString(10,5) );
2 голосов
/ 15 февраля 2011

В документах четко указано, что ArgumentOutOfRangeException будет выброшено, когда "сумма startIndex и length больше длины текущего экземпляра."

1 голос
/ 15 февраля 2011

Когда я запускаю это, исключение выдается в строке 5, что имеет смысл, так как во входной строке недостаточно символов, чтобы сгенерировать 26 символов, начиная с 15.

1 голос
/ 15 февраля 2011

Второй аргумент - это длина, а не «конечный символ». Не может найти 14 символов, начиная с 10-го - отсюда ошибка.

1 голос
/ 15 февраля 2011

Второй параметр - длина, но не последний индекс. Так что в вашем случае 15 + 26 = 41, что выходит за пределы.

0 голосов
/ 15 февраля 2011

Пожалуйста, проверьте, чтобы ваша строка содержала пробелы внутри нее, а не tab символов. Это единственная причина, по которой вы можете иметь исключение в строке 4 . Но даже если ваша строка содержит пробелы, у вас будет исключение в строке 5 , потому что длина строки - 26, а не индекс последнего символа.

0 голосов
/ 15 февраля 2011

Метод StringBuilder.ToString работает не так, как вы ожидаете. Параметры:

  1. startIndex : начальная позиция подстроки в этом случае.
  2. длина : длина подстроки.

Итак, вы начинаете с индекса 15 и пытаетесь получить следующие 26 символов, что выходит за пределы длины строки.

Документацию можно найти здесь .

0 голосов
/ 15 февраля 2011

Прежде всего, вы должны задокументировать нам, какое исключение вы получите, вместо того, чтобы оставить нас в неведении, чтобы попытаться выяснить это сами, тогда, как догадка, я бы сказал, что ваша строка не содержит более 24 символов ...

...