J'ai une ficelle qui ressemble
string url = "www.example.com/aaa/bbb.jpg";
"www.example.com/" a une longueur fixe de 18 ans. Je veux obtenir la partie "aaa/bbb" de cette chaîne (l'URL réelle n'est pas un exemple, ni aaa/bbb, la longueur peut varier)
alors voici ce que j'ai fait:
string newString = url.Substring(18, url.Length - 4);
Ensuite, j'ai eu l'exception: index et length doivent faire référence à un emplacement dans la chaîne. Quel est le problème avec mon code et comment y remédier? Merci d'avance.
Le deuxième paramètre dans Substring
est la longueur de la sous-chaîne, pas l'index de fin.
Vous devez probablement inclure le traitement pour vérifier que cela commence bien avec ce que vous attendez, se termine avec ce que vous attendez et au moins aussi longtemps que vous le souhaitez. Et si cela ne correspond pas, vous pouvez soit faire autre chose, soit lancer une erreur significative.
Voici un exemple de code qui valide que l'URL contient vos chaînes, qui est également refactorisé pour faciliter la modification du préfixe/suffixe en 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
Votre erreur est les paramètres de sous-chaîne. Le premier paramètre doit être l'index de départ et le second, la longueur ou le décalage par rapport à l'index de départ.
string newString = url.Substring(18, 7);
Si la longueur de la sous-chaîne peut varier, vous devez en calculer la longueur.
Quelque chose dans la direction de (url.Length - 18) - 4
(ou url.Length - 22
)
À la fin, cela ressemblera à quelque chose comme ça
string newString = url.Substring(18, url.Length - 22);
Que diriez-vous quelque chose comme ça :
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
Vous devez trouver la position du premier /
, puis calculer la portion souhaitée:
string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
Essaye ça:
int positionOfJPG=url.IndexOf(".jpg");
string newString = url.Substring(18, url.Length - positionOfJPG);
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))
Vous pouvez utiliser le rembourrage à droite.
string url = "www.example.com/aaa/bbb.jpg";
string newString=url.PadRight(4);
string newString = (url.Substring(18, url.Length - 4)).Trim();
Bon codage!
Voici une autre suggestion. Si vous pouvez ajouter http: // à votre chaîne d'URL, vous pouvez le faire.
string path = "http://www.example.com/aaa/bbb.jpg";
Uri uri = new Uri(path);
string expectedString =
uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));