C# - Substring: l'index et la longueur doivent se référer à un emplacement dans la chaîne
j'ai une chaîne qui ressemble à
string url = "www.example.com/aaa/bbb.jpg";
<!--2 www.example.com / " est de 18 de longueur fixe. Je veux obtenir la partie "AAA / bbb" à partir de cette chaîne (l'url actuelle n'est pas un exemple ni aaa/bbb bien que la longueur puisse varier)
donc voici ce que j'ai fait:
string newString = url.Substring(18, url.Length - 4);
puis j'ai eu l'exception: l'index et la longueur doivent se référer à un emplacement dans la chaîne. Quel est le problème avec mon code et comment le résoudre? Merci à l'avance.
8 réponses
Le second paramètre Substring
est la longueur de la sous-couche, pas l'indice de fin.
vous devriez probablement inclure la manipulation pour vérifier qu'elle commence effectivement avec ce que vous attendez, se termine avec ce que vous attendez, et est au moins aussi longtemps que vous attendez. Et si elle ne correspond pas, vous pouvez soit faire quelque chose d'autre ou jeter une erreur significative.
voici un exemple de code qui valide que l'url contient vos chaînes, qui est aussi un peu remanié pour faciliter le changement 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 la soustraction. Le premier paramètre devrait être l'indice de départ et le second devrait être la longueur ou le décalage par rapport à l'indice de départ.
string newString = url.Substring(18, 7);
Si la longueur de la chaîne peut varier, vous devez calculer la longueur.
quelque chose dans la direction de (url.Length - 18) - 4
(ou url.Length - 22
)
À la fin il va ressembler à quelque chose comme ceci
string newString = url.Substring(18, url.Length - 22);
Que Diriez-vous de quelque chose comme ceci :
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 de la première /
, et ensuite calculer la portion que vous voulez:
string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
Essaye Ceci:
int positionOfJPG=url.IndexOf(".jpg");
string newString = url.Substring(18, url.Length - positionOfJPG);
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))
Voici une autre suggestion. Si vous pouvez ajouter http:// à votre chaîne 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("."));
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!