placer tous les caractères à droite du dernier tiret


114

J'ai ce qui suit:

string test = "9586-202-10072"

Comment pourrais-je obtenir 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?

Réponses:


237

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 ceci sur une chaîne sans tirets entraînera le retour de la même chaîne.


1
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 l'un strou l' autre est nul ou s'il ne contient pas du tout de trait d'union. (Dans le cas où il n'y a pas de trait d'union, il ne lance pas; il renvoie la chaîne source entière.)
LukeH

@LukeH: Merci pour la mise en garde. Je n'ai pas vérifié et j'ai supposé à tort qu'il allait lancer.
Jon

3
Eh bien, LastIndexOfrenvoie -1 si rien n'est trouvé (il s'agit d'un comportement documenté, il est donc prudent de s'y fier). str.Substring(1-1)vous donne une chaîne égale à str. Pas de surprises, ici.
Brian

2
@Brian: Je pense que j'ai battu mon record pour la plupart des erreurs dans la même déclaration triviale. Leçon: n'écrivez jamais rien sans relire le code après coup. Merci.
Jon

57

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

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

Console.WriteLine(lastFragment);

5
Cela permettra probablement aux développeurs de gagner le plus de temps, mais dans le cas général, notez que du code comme celui-ci entraînera de nombreuses allocations de chaînes (probablement quatre dans l'exemple ci-dessus) et pourrait donc être désaccentué dans les sections critiques pour les performances.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

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

3

Je peux voir que ce message a été vu plus de 46 000 fois. Je parie que beaucoup des 46 000 téléspectateurs posent cette question simplement parce qu'ils veulent juste le nom du fichier ... et ces réponses peuvent être un trou de lapin si vous ne pouvez pas rendre votre sous-chaîne textuelle en utilisant le signe arobase.

Si vous voulez simplement obtenir le nom du fichier, il existe une réponse simple qui doit être mentionnée 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




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

J'ai créé une extension de chaîne pour cela, j'espère que cela vous aidera.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.