Вопрос по c#, .net, exception, string, substring – C # - Подстрока: индекс и длина должны ссылаться на местоположение в строке

21

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

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

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

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

Ваш Ответ

7   ответов
5

Как насчет чего-то вроде этого:

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
6

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

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

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

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

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

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

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

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

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

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

если вы хотите сделать код более безопасным. Попробуйте проверить длину, прежде чем пытаться получить подстроку.
2

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

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

Вот еще одно предложение. Если вы можете добавить http: // к вашей строке URL, вы можете сделать это

  string path = "http://www.example.com/aaa/bbb.jpg";
  Uri uri = new Uri(path);            
  string expectedString = 
      uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));
2
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))

Похожие вопросы