web-dev-qa-db-fra.com

Comment obtenir la dernière partie d'une chaîne?

É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

48
Paul Fryer

une doublure avec Linq:

string lastPart = text.Split('/').Last();
110
naspinski

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();
51
Benp44

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();
38
Kobi

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.

15
Jon Skeet

Voici une manière assez concise de faire ceci:

str.Substring(str.LastIndexOf("/")+1);
9
Igor Zevaka
if (!string.IsNullOrEmpty(url))
    return url.Substring(url.LastIndexOf('/') + 1);
return null;
3
Matthew Abbott

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!

2
Simon Kiely
Path.GetFileName

considère/et\comme séparateurs.

Path.GetFileName ("http://s.opencalais.com/1/pred/BusinessRelationType") =
"BusinessRelationType"
1
citykid

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();
1
GiampaoloGabba

Sinon, vous pouvez utiliser l'expression régulière /([^/]*?)$ pour trouver une correspondance.

1
DixonD

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
0
CSharper