Étant donné cette chaîne:
http://s.opencalais.com/1/pred/BusinessRelationType
Je veux obtenir la dernière partie: "BusinessRelationType"
Je pensais inverser toute la chaîne, puis chercher le premier "/", tout prendre à gauche et inverser. Cependant, j'espère qu'il existe une méthode meilleure/plus concise. Pensées?
Merci Paul
une doublure avec Linq:
string lastPart = text.Split('/').Last();
Chaque fois que je me trouve en train d'écrire du code tel que LastIndexOf("/")
, j'ai l'impression que je fais probablement quelque chose de dangereux, et il existe probablement une meilleure méthode déjà disponible.
Comme vous travaillez avec un URI, je vous recommande d’utiliser la classe System.Uri
. Ceci vous fournit une validation et un accès sûr et facile à n’importe quelle partie de l’URI.
Uri uri = new Uri("http://s.opencalais.com/1/pred/BusinessRelationType");
string lastSegment = uri.Segments.Last();
Vous pouvez utiliser String.LastIndexOf
.
int position = s.LastIndexOf('/');
if (position > -1)
s = s.Substring(position + 1);
Une autre option consiste à utiliser une Uri
, si c'est ce dont vous avez besoin. Cela présente l’avantage d’analyser d’autres parties de l’URI et de gérer correctement la chaîne de requête, par exemple: BusinessRelationType?q=hello world
Uri uri = new Uri(s);
string leaf = uri.Segments.Last();
Vous pouvez utiliser string.LastIndexOf
pour trouver le dernier/et ensuite Substring
pour tout obtenir après:
int index = text.LastIndexOf('/');
string rhs = text.Substring(index + 1);
Notez que comme LastIndexOf
renvoie -1 si la valeur n’est pas trouvée, la deuxième ligne renvoie la chaîne entière s’il n’ya pas de/dans le texte.
Voici une manière assez concise de faire ceci:
str.Substring(str.LastIndexOf("/")+1);
if (!string.IsNullOrEmpty(url))
return url.Substring(url.LastIndexOf('/') + 1);
return null;
Un petit conseil pour les personnes idiotes ou non observantes (ou pour ceux qui ont récemment abandonné le café et qui sont idiots, inobservateurs, grognons ... comme moi) - Les chemins de fichiers Windows utilisent un '\'
... tous les exemples ici par contre , utilisez un '/'
.
Utilisez donc un '\\'
pour obtenir la fin d'un chemin de fichier Windows! :)
Les solutions ici sont parfaites et complètes, mais cela pourrait peut-être empêcher une autre âme pauvre de perdre une heure comme je viens de le faire!
Path.GetFileName
considère/et\comme séparateurs.
Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") =
"BusinessRelationType"
La réponse acceptée peut donner des résultats non souhaités (chaîne vide) si l'URL se termine par /
Pour éviter cela, vous pouvez utiliser:
string lastPart = text.TrimEnd('/').Split('/').Last();
Sinon, vous pouvez utiliser l'expression régulière /([^/]*?)$
pour trouver une correspondance.
Pour String:
var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var lastPartOfUrl = stringUrl.Substring(stringUrl.LastIndexOf("/") + 1);
Si vous convertissez une chaîne en Uri: // Tout dépend de vos besoins.
var stringUrl = "http://s.opencalais.com/1/pred/BusinessRelationType";
var convertStringToUri = new Uri(stringUrl);
var lastPartOfUrl = convertStringToUri.PathAndQuery.Substring(convertStringToUri.AbsolutePath.LastIndexOf("/") + 1);
Sortie:
BusinessRelationType