Это странный способ сделать это, но я протестировал с помощью собственного образца, и он работает нормально при ожидаемых обстоятельствах.
Проблема возникает, когда startString
не найден, потому что результирующий массив из первого string.Split
будет содержать один элемент (исходную строку ввода). Когда вы пытаетесь разделить второй элемент на endChar
, нет второго элемента для поиска, и это ваше исключение.
Я уверен, что есть более элегантные способы сделать это, но это будет делать эту работу, возвращая null
если либо startString
или endChar
не может быть найдено:
public static string ExtractString(string content, string startString, char endChar)
{
int i, j;
i = content.IndexOf(startString);
if (i == -1)
return null;
else
i += startString.Length; // Start at char after startString
j = content.IndexOf(endChar);
if (j == -1)
return null;
return content.Substring(i, j - i);
}
исключение прямо вперед. вы получаете доступ к индексу, который недоступен или не существует, или больше длины вашего массива. –
Вместо того, чтобы поднять руки с тревогой, узнайте, где ошибка. Разбейте код на несколько строк, которые делают одну вещь вместо одной строки, которая делает все. Тогда будет легко увидеть, где проблема основана на том, на какой строке она ломается. – jmcilhinney