133 votes

récupérer tous les caractères à droite du dernier tiret

J'ai les éléments suivants :

string test = "9586-202-10072"

Comment faire pour que tous les caractères à droite de la finale - donc 10072. Le nombre de caractères est toujours différent à droite du dernier tiret.

Comment cela peut-il être fait ?

267voto

Jon Points 194296

Vous pouvez obtenir la position du dernier - avec str.LastIndexOf('-') . La prochaine étape est donc évidente :

var result = str.Substring(str.LastIndexOf('-') + 1);

Correction :

Comme Brian l'indique ci-dessous, l'utilisation de cette fonction sur une chaîne sans tirets entraînera le renvoi de la même chaîne.

1 votes

Cela fonctionne même lorsque le trait d'union est le dernier caractère, dans ce cas, il renvoie correctement une chaîne vide. Cela n'échouera que si str est nulle ou si elle ne contient pas de trait d'union. (Dans le cas où il n'y a pas de trait d'union, il ne lance pas la requête ; il renvoie la chaîne source entière).

0 votes

@LukeH : Merci pour l'info. Je n'ai pas vérifié et j'ai supposé par erreur qu'il fallait le lancer.

3 votes

Bien, LastIndexOf renvoie -1 si rien n'est trouvé (c'est un comportement documenté, il est donc prudent de s'y fier). str.Substring(1-1) vous donne une chaîne égale à str . Pas de surprise, ici.

68voto

p.campbell Points 42771

Vous pourriez utiliser LINQ, et vous épargner l'analyse explicite :

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

6 votes

Cela permettra probablement de gagner le plus de temps pour le développeur, mais dans le cas général, il faut noter que le code comme celui-ci nécessite de nombreuses allocations de chaînes de caractères (probablement quatre dans l'exemple ci-dessus) et qu'il peut donc être négligé dans les sections où les performances sont critiques.

4voto

LukeH Points 110965
string tail = test.Substring(test.LastIndexOf('-') + 1);

3voto

user704401 Points 13

Je vois que ce message a été vu plus de 46 000 fois. Je parie qu'une grande partie de ces 46 000 visiteurs posent cette question simplement parce qu'ils veulent simplement le nom du fichier... et ces réponses peuvent être un terrier de lapin si vous ne pouvez pas rendre votre sous-chaîne verbatim en utilisant le signe at.

Si vous souhaitez simplement obtenir le nom du fichier, il existe une réponse simple qu'il convient de mentionner ici. Même si ce n'est pas la réponse précise à la question.

result = Path.GetFileName(fileName);

voir https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx

3voto

msarchet Points 9059
YourString.Substring(YourString.LastIndexOf("-"));

5 votes

Si vous excluez "+ 1" à la fin, alors la sortie contiendra un caractère spécial avec la chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X