С# - Подстрока: индекс и длина должны относиться к местоположению внутри строки
У меня есть строка, которая выглядит как
string url = "www.example.com/aaa/bbb.jpg";
"www.example.com/" имеет длину 18. Я хочу получить часть "aaa/bbb" из этой строки (фактический URL-адрес не является примером, ни aaa/bbb, хотя длина может меняться)
так вот что я сделал:
string newString = url.Substring(18, url.Length - 4);
Затем я получил исключение: индекс и длина должны ссылаться на местоположение внутри строки. Что не так с моим кодом и как его исправить? Спасибо заранее.
Ответы
Ответ 1
Второй параметр Substring
- это длина подстроки, а не конечный индекс.
Вероятно, вы должны включить обработку, чтобы убедиться, что она действительно начинается с того, что вы ожидаете, заканчивая тем, что вы ожидаете, и, по крайней мере, так долго, как вы ожидаете. И если это не соответствует, вы можете либо сделать что-то еще, либо выбросить значимую ошибку.
Вот пример кода, который подтверждает, что url содержит ваши строки, который также немного реорганизован, чтобы упростить изменение префикса/суффикса для полосы:
var prefix = "www.example.com/";
var suffix = ".jpg";
string url = "www.example.com/aaa/bbb.jpg";
if (url.StartsWith(prefix) && url.EndsWith(suffix) && url.Length >= (prefix.Length + suffix.Length))
{
string newString = url.Substring(prefix.Length, url.Length - prefix.Length - suffix.Length);
Console.WriteLine(newString);
}
else
//handle invalid state
Ответ 2
Ваша ошибка в параметрах подстроки. Первым параметром должен быть начальный индекс, а второй должен быть длиной или смещением от startindex.
string newString = url.Substring(18, 7);
Если длина подстроки может варьироваться, вам нужно вычислить длину.
Что-то в направлении (url.Length - 18) - 4
(или url.Length - 22
)
В конце он будет выглядеть примерно так.
string newString = url.Substring(18, url.Length - 22);
Ответ 3
Как насчет чего-то вроде этого:
string url = "http://www.example.com/aaa/bbb.jpg";
Uri uri = new Uri(url);
string path_Query = uri.PathAndQuery;
string extension = Path.GetExtension(path_Query);
path_Query = path_Query.Replace(extension, string.Empty);// This will remove extension
Ответ 4
Вам нужно найти позицию первого /
, а затем вычислить нужную вам часть:
string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
Ответ 5
Попробуйте следующее:
int positionOfJPG=url.IndexOf(".jpg");
string newString = url.Substring(18, url.Length - positionOfJPG);
Ответ 6
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))
Ответ 7
Вот еще одно предложение. Если вы можете добавить http://в строку url, вы можете сделать это
string path = "http://www.example.com/aaa/bbb.jpg";
Uri uri = new Uri(path);
string expectedString =
uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));
Ответ 8
Вы можете использовать право отступов.
string url = "www.example.com/aaa/bbb.jpg";
string newString=url.PadRight(4);
string newString = (url.Substring(18, url.Length - 4)).Trim();
Счастливое кодирование!
Ответ 9
columns.Add(c => c.Status).Titled("Status").Filterable(true);