Comment faire pour supprimer un suffixe à partir de la fin de la chaîne?
Je veux:
- Vérifier une variable et de déterminer si les 2 derniers caractères sont "Id"
- Si oui, retirez-les.
Je peux le faire avec ce ci-dessous, mais il va exploser si il y a un "Id" sous-chaîne autre que la fin. Est-il un RemoveFromEnd() méthode qui prend un certain nombre de caractères en argument?
if (column.EndsWith("Id"))
{
//remove last 2 characters
column = column.replace("Id", "");
}
Je vois cette solution: qui fait ceci:
column = System.Text.RegularExpressions.Regex.Replace(column, "Id$", "");
mais il dit que c'est assez lent, et je vais être en cours d'exécution de ce code à l'intérieur d'un bloc de code que je voudrais être extrêmement rapide, donc je voulais voir si une solution plus rapide est disponible.
- Juste curieux de voir comment "lente" la regexp est (une fin d'ancrage w/o mandature devrait être zippy-rapide) ... même si la sous-chaîne est probablement plus approprié ici. Otoh, que, avec la regexp n'est pas explicite conditionnel/EndsWith.
- L'expression régulière doit être le plus rapide dans le cas général. Avez-vous essayé avec la précompilation ou les stocker en tant que membre de l'utiliser dans votre méthode? (afin d'éviter le coût de la création de la regex à chaque fois)
- double possible de garniture de chaîne à la fin de la chaîne de caractères
- L'extrait de code que vous mettez supprime tous les "Id" de la chaîne si elle a comme suffixe, il sera de retour "MyWrong" si la chaîne d'entrée est "MyIdWrongId"...
Vous devez vous connecter pour publier un commentaire.
String.Substring
peut le faire:Vous pouvez l'utiliser pour restaurer votre propre
RemoveFromEnd
:TrimEnd(this string, string, string)
et. al. 🙂Une alternative à la
SubString
méthode consiste à utiliser unRegex.Replace
deSystem.Text.RegularExpressions
:De cette façon, vous permet d'éviter le test, mais vous ne savez pas si c'est vraiment une vitesse de bénéficier :-). Au moins une alternative qui pourrait être utile dans certains cas où vous avez besoin de vérifier plus d'une chose à la fois.
L'expression rationnelle peut être compilé et ré-utilisé pour obtenir une certaine augmentation de la performance et utilisé à la place de l'appel à la méthode statique et peut être utilisée comme ceci:
EndsWith
-Substring
?Puisque vous connaissez la longueur de la partie à supprimer, vous pouvez utiliser
Chaîne
:Replace
dans l'OP. Va ajouter de la si-bloc pour plus de clarté si.Bien, il peut y avoir un
RemoveFromEnd()
méthode si vous écrivez votre propre:Vous pouvez simplement l'utiliser comme suit:
Essayez ceci:
Couple de notes à ajouter à @Jon réponse:
Voulez-vous faire de ce cas insensiblement?
Si l'ID est unique dans la chaîne et doit toujours être retiré...
Si sa casse et se produit seulement une fois que je serais encore utiliser la première case.
Remove
méthode