【问题标题】:Unable to collect substring from a string无法从字符串中收集子字符串
【发布时间】:2013-05-28 05:19:06
【问题描述】:

我正在从来自 word 文件的字符串中提取子字符串。但是即使子字符串的开始和结束索引小于字符串的长度,我也会收到index out of range 的错误。

for(int i=0;i<y.Length-1;i++)
{
    if (Regex.IsMatch(y[i], @"^[A]"))
    {       
        NumberOfWords= y[i].Split(' ').Length;

        if (NumberOfWords > 5)
        {
            int le = y[i].Length;
            int indA = y[i].IndexOf("A");
            int indB = y[i].IndexOf("B");
            int indC = y[i].IndexOf("C");
            int indD = y[i].IndexOf("D");

            //if (indD > 1 && indC > 1)
            //    breakop2 = breakop2 + '\n' + '\n' + y[i].Substring(indC, indD);

            if (indC > 1 && indB > 1)
                breakop1 = breakop1 + '\n' + y[i].Substring(indB, indC);

            if (indB > 1)
                sr = y[i].Substring(indA, indB);
            else
                sr = y[i];

            breakop = breakop +'\n'+'\n'+ sr;
            Acount++;
            //textBox1.Text = s[i];
            check1 = check1 + '\n' + '\n' + y[i];
            //i++;
        }
    }
}

【问题讨论】:

    标签: c# string substring


    【解决方案1】:

    String.Substring(int, int) 不需要开始索引和结束索引(就像在 Java 中那样);它需要一个起始索引和一个长度。所以也许你想要:

    sr = y[i].Substring(indA, indB - indA);
    

    但您应该检查indB 是否大于indA。 (基本上,如果B 出现在A 之前,您需要弄清楚您希望它的行为方式。)

    您还需要对 Substring(indB, indC) 应用相同的行为。

    【讨论】:

      【解决方案2】:

      String.Substring 方法采用起始索引和长度。您正在传递两个索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多