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

string newString = url.Substring(18, (url.LastIndexOf(".") - 18))

вот еще одно предложение. Если вы можете добавить 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();

Удачи В Кодировании!