С# - Подстрока: индекс и длина должны относиться к местоположению внутри строки - программирование
Подтвердить что ты не робот

С# - Подстрока: индекс и длина должны относиться к местоположению внутри строки

У меня есть строка, которая выглядит как

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);

Затем я получил исключение: индекс и длина должны ссылаться на местоположение внутри строки. Что не так с моим кодом и как его исправить? Спасибо заранее.

4b9b3361

Ответ 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);