2013-05-28 4 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); 

Но вы должны также проверьте, что indB больше indA. (Вам нужно разобраться, как вы хотите, чтобы это было, если B подходит до A.)

Вам также необходимо применить такое же поведение для Substring(indB, indC).

Смежные вопросы