无法从字符串中提取子字符串

Mav*_*ven 0 .net c# substring

我是一个长字符串数组,我想将它传递给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++;
}
Run Code Online (Sandbox Code Playgroud)

在循环的值的第一次迭代lngth就是250这是很好的,在未来的迭代我也希望它250,因为我是从250-500字符提取子,但令人吃惊的值lngth在第二次迭代变量获得500.

这是为什么?我也试图在循环中每次初始化字符串变量,所以它从零开始但没有增益.

Jus*_*ony 9

Substring的第二个参数是您想要的长度,而不是停止索引.

public string Substring(
    int startIndex,
    int length
)
Run Code Online (Sandbox Code Playgroud)

因此,您需要做的就是更改代码以获得起始索引和长度(phase)

fileInString.Substring(cStart, phase)
Run Code Online (Sandbox Code Playgroud)


Aas*_*mar 7

以下是有关如何使用Substring的MSDN链接:

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

根据MSDN,Substring方法中的第一个参数是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;
}
Run Code Online (Sandbox Code Playgroud)