2013-12-11 2 views
0

Меня долго массив строк, и я хочу, чтобы передать его в другую функцию в кусках 250 символов один раз, я написал этот код:Невозможно извлечь подстроку из строки

var cStart = 0; 
var phase = 250; 
var cEnd = cStart + phase; 
var count = 0; 

while (count < 10000) 
{ 
    string fileInStringTemp = ""; 
    fileInStringTemp = fileInString.Substring(cStart, cEnd); 
    var lngth = fileInStringTemp.Length; 

    //Do Some Work 

    cStart += phase; 
    cEnd += phase; 
    count++; 
} 

В первом итерация цикла значение lngth равно 250, что хорошо, на следующей итерации я тоже хочу ее 250, потому что я извлекаю подстроку с 250-500 символов, но в шоке значение lngth переменной во второй итерации получает 500.

Почему? Я также пытаюсь инициализировать строковую переменную каждый раз в цикле, чтобы она начиналась с нуля, но без усиления.

ответ

9

Substring's second parameter is the length you want, а не индекс остановки.

public string Substring(
    int startIndex, 
    int length 
) 

Таким образом, все, что вам нужно сделать, это изменить код, чтобы иметь индекс начала и длину (phase)

fileInString.Substring(cStart, phase) 
2

Попробуйте изменить

fileInStringTemp = fileInString.Substring(cStart, cEnd); 

в

fileInStringTemp = fileInString.Substring(cStart, cPhase); 
0

Подстрока имеет параметры (startIndex, count), так что вы не вслух для увеличения конца. лучше изменить на Substring(cStart, phase)

0

Второй параметр для вашего метода SubString() - это длина возвращаемой подстроки. (Вы должны быть в состоянии всегда использовать 250 и просто держать сдвигая начальную точку - 1-ый из параметров - пока вы не сделали.)

7

Вот ссылка MSDN о том, как работать с подстроки:

https://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx

В соответствии с первым параметром MSDN в методе подстроки является StartIndex, который определяется как Начальная позиция символа нулевой основы подстроки и второй параметр используется для определения длины подстроки, которая определена как Число символов в подстроке.

Таким образом, вы должны попробовать это:

var cStart = 0; 
var phase = 250; 
var count = 0; 

while (count < 10000) 
{ 
    string fileInStringTemp = ""; 
    fileInStringTemp = fileInString.Substring(cStart, phase); 
    var lngth = fileInStringTemp.Length; 

    //Do Some Work 
    count++; 
    cStart = phase * count + 1; 
} 
Смежные вопросы