В C# - подстрока: индекс и длина должны указывать на позицию в строке
у меня есть строка, которая выглядит так:
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);
Я получил исключение: индекс и длина должны указывать на позицию в строке. Что не так с моим кодом и как это исправить? Спасибо заранее. 8 ответов
второй параметр в Substring
- длина подстроки, а не конечный индекс.
вероятно, вы должны включить обработку, чтобы проверить, что она действительно начинается с того, что вы ожидаете, заканчивается тем, что вы ожидаете, и, по крайней мере, так долго, как вы ожидаете. И тогда, если он не соответствует, вы можете сделать что-то еще или бросить значимую ошибку.
вот пример кода, который проверяет, что URL-адрес содержит строки, что также является рефакторинг немного чтобы упростить изменение префикса / суффикса на strip:
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
ваша ошибка-это параметры подстроки. Первым параметром должен быть начальный индекс, а вторым-длина или смещение от startindex.
string newString = url.Substring(18, 7);
если длина подстроки может меняться, что вам нужно рассчитать длину.
что-то в направлении (url.Length - 18) - 4
(или url.Length - 22
)
В итоге это будет выглядеть примерно так
string newString = url.Substring(18, url.Length - 22);
Как насчет чего-то вроде этого :
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
вам нужно найти положение первого /
, а затем вычислить часть, которую вы хотите:
string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
Попробуйте Это:
int positionOfJPG=url.IndexOf(".jpg");
string newString = url.Substring(18, url.Length - positionOfJPG);
вот еще одно предложение. Если вы можете добавить http: / / в строку url, вы можете сделать это
string path = "http://www.example.com/aaa/bbb.jpg";
Uri uri = new Uri(path);
string expectedString =
uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));
вы можете использовать отступы.
string url = "www.example.com/aaa/bbb.jpg";
string newString=url.PadRight(4);
string newString = (url.Substring(18, url.Length - 4)).Trim();
Удачи В Кодировании!