Subtekenreeksindex en lengte moeten verwijzen naar een locatie binnen de tekenreeks

Ik heb een string die eruitziet als

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

“www.example.com/” heeft een vaste lengte van 18. Ik wil het “aaa/bbb”-gedeelte uit deze string halen (de werkelijke url is echter geen voorbeeld en ook geen aaa/bbb, de lengte kan variëren)

dus dit is wat ik deed:

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

Toen kreeg ik de uitzondering: index en lengte moeten verwijzen naar een locatie binnen de string. Wat is er mis met mijn code en hoe kan ik dit oplossen? Bij voorbaat dank.


Antwoord 1, autoriteit 100%

De tweede parameter in Substringis de lengte van de substring, niet de eindindex.

Je moet waarschijnlijk de afhandeling opnemen om te controleren of het inderdaad begint met wat je verwacht, eindigt met wat je verwacht, en minstens zo lang is als je verwacht. En als het dan niet overeenkomt, kun je iets anders doen of een zinvolle fout maken.

Hier is een voorbeeldcode die valideert dat de url uw strings bevat, die ook een beetje is aangepast om het gemakkelijker te maken om het voorvoegsel/achtervoegsel in strip te veranderen:

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

Antwoord 2, autoriteit 10%

Uw fout is de parameters voor Substring. De eerste parameter moet de startindex zijn en de tweede de lengte of offset van de startindex.

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

Als de lengte van de substring kan variëren, moet je de lengte berekenen.

Iets in de richting van (url.Length - 18) - 4(of url.Length - 22)

Uiteindelijk ziet het er ongeveer zo uit

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

Antwoord 3, autoriteit 10%

Wat dacht je van zoiets:

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

Antwoord 4, autoriteit 7%

Je moet de positie van de eerste /vinden en vervolgens het gewenste deel berekenen:

string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);

Antwoord 5, autoriteit 3%

Probeer dit:

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

Antwoord 6, autoriteit 3%

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

Antwoord 7

Hier is nog een suggestie. Als u http:// voor uw url-tekenreeks kunt plaatsen, kunt u dit doen

 string path = "http://www.example.com/aaa/bbb.jpg";
  Uri uri = new Uri(path);            
  string expectedString = 
      uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));

Antwoord 8

U moet uw verklaring als volgt controleren:

string url = "www.example.com/aaa/bbb.jpg";
string lenght = url.Lenght-4;
if(url.Lenght > 15)//eg 15
{
 string newString = url.Substring(18, lenght);
}

Other episodes