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

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

string url = "www.example.com/aaa/bbb.jpg";

& Quot; www.example.com/" 18 фиксированной длины. Я хочу получить "aaa / bbb" часть из этой строки (фактический URL не является ни примером, ни aaa / bbb, хотя длина может варьироваться)

вот что я сделал:

string newString = url.Substring(18, url.Length - 4);

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

 Bastardo22 июн. 2012 г., 01:39
почему бы не использоватьlastindexof(".") ?
 Chris Sinclair22 июн. 2012 г., 01:27
Нужно также вычесть 18, чтобы учесть начальный & quot; www.xxx.com/" РЕДАКТИРОВАТЬ: я имею в виду 12. Ваш 18 должно быть 12 :)
 Joe Castro22 июн. 2012 г., 01:27
Аргументами для подстроки являются (startIndex, length). Я не уверен, откуда вы получаете 18 и длину 4 для той подстроки, которую вы хотите.
 Andrew Kennan22 июн. 2012 г., 01:38
Можете ли вы использовать System.Uri (msdn.microsoft.com/en-us/library/system.uri.aspx) класс для этого вместо?
 Manto22 июн. 2012 г., 01:40
Я не хочу помещать этот URL здесь, поэтому вместо этого я ставлю xxx (для ссылки на этот URL). & Quot; www.xxxxxx.com/" 18 в длину.

Ответы на вопрос(7)

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 = "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

Ваша ошибка в параметрах Substring. Первый параметр должен быть начальным индексом, а второй должен быть длиной или смещением от начального индекса.

string newString = url.Substring(18, 7);

Если длина подстроки может варьироваться, вам нужно рассчитать длину.

Что-то в направлении(url.Length - 18) - 4 (или жеurl.Length - 22)

В итоге это будет выглядеть примерно так

string newString = url.Substring(18, url.Length - 22);
 Manto22 июн. 2012 г., 01:37
Длина "aaa / bbb" Время от времени меняется, поэтому не совсем 7. Но спасибо, что ответили на мой вопрос. проголосовал за твой ответ :)
 22 июн. 2012 г., 01:45
22 правильно, потому что вы хотите знать длину, а не индекс
Решение Вопроса

Второй параметр в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
 06 февр. 2015 г., 22:44
это должен быть конец индекса. : P Microsoft.
 22 июн. 2012 г., 01:30
url.Length - 22 ??? Как вы получили этот номер?
 22 июн. 2012 г., 01:29
Ой, моя ошибка. Я исправлю это.
 01 мар. 2016 г., 09:28
Мой совет для человечества - не посещать этот конкретный сайт на работе.
 22 июн. 2012 г., 01:28
Да, но Мандо хочет выбросить & quot; .jpg & quot; часть.

Вы можете использовать отступ справа.

string url = "www.example.com/aaa/bbb.jpg";
string newString=url.PadRight(4);
string newString = (url.Substring(18, url.Length - 4)).Trim();

Удачного кодирования!

 13 апр. 2017 г., 12:11
если вы хотите сделать код более безопасным. Попробуйте проверить длину, прежде чем пытаться получить подстроку.

Попробуй это:

 int positionOfJPG=url.IndexOf(".jpg");
 string newString = url.Substring(18, url.Length - positionOfJPG);

Ваш ответ на вопрос