2013-05-28 54 views
3

我正在从字符文件中提取字符串中的子字符串。但即使子串的开始和结束索引小于字符串的长度,我也会收到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++; 
     } 
    } 
} 

回答

11

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

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

,但你应该检查indBindA更大。 (如果B基本上在A之前,你需要弄清楚你希望这样做的行为。)

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