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

时间:2013-12-11 20:00:49

标签: c# .net 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++;
}

在循环的第一次迭代中,lngth的值为250,这很好,在下一次迭代中我也希望它为250因为我从250-提取子字符串500个字符但令人震惊的是,第二次迭代中lngth变量的值为500

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

5 个答案:

答案 0 :(得分:9)

Substring's second parameter is the length you want,而不是止损指数。

public string Substring(
    int startIndex,
    int length
)

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

fileInString.Substring(cStart, phase)

答案 1 :(得分: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;
}

答案 2 :(得分:2)

尝试更改

fileInStringTemp = fileInString.Substring(cStart, cEnd);

fileInStringTemp = fileInString.Substring(cStart, cPhase);

答案 3 :(得分:0)

Substring具有参数(startIndex, count),因此您不允许增加结束。更好地更改为Substring(cStart, phase)

答案 4 :(得分:0)

SubString()方法的第二个参数是要返回的子字符串的长度。 (你应该能够总是使用250并且只是继续改变你的起点 - 第一个参数 - 直到你完成。)