Lire les 3 derniers caractères = une chose, supprimer les 3 derniers caractères = une autre. Lequel?
Kieren Johnstone
Réponses:
234
lire les 3 derniers caractères de la chaîne [Question posée initialement]
Vous pouvez utiliser string.Substring et lui donner l'index de départ et il obtiendra la sous-chaîne à partir de l'index donné jusqu'à la fin.
myString.Substring(myString.Length-3)
Récupère une sous-chaîne de cette instance. La sous-chaîne commence à une position de caractère spécifiée. MSDN
Modifier , pour le message mis à jour
Supprimer les 3 derniers caractères de la chaîne [Question mise à jour]
Pour supprimer les trois derniers caractères de la chaîne, vous pouvez utiliser string.Substring (Int32, Int32) et lui donner l'index de début 0et l'index de fin trois inférieurs à la longueur de la chaîne . Il obtiendra la sous-chaîne avant les trois derniers caractères.
Récupère une sous-chaîne de cette instance. La sous-chaîne commence à une position de caractère spécifiée et a une longueur spécifiée.
Vous pouvez également utiliser la méthode String.Remove (Int32) pour supprimer les trois derniers caractères en passant l'index de début comme longueur - 3 , il supprimera de ce point à la fin de la chaîne.
Renvoie une nouvelle chaîne dans laquelle tous les caractères de l'instance actuelle, commençant à une position spécifiée et continuant jusqu'à la dernière position, ont été supprimés
Merci @braks, la question initialement posée était "lire les 3 derniers caractères de la chaîne" Ceci est édité plus tard et je ne savais pas, voir l'historique d'édition des questions. Votre commentaire m'a aidé à corriger ma réponse qui est devenue erronée après la modification de la question.
Celui-ci est assez "créatif", car il n'a pas besoin de la longueur de la chaîne, mais l'opération inverse est probablement plus coûteuse.
Aleksandar
4
Inverser une chaîne est certainement plus cher que de compter ses caractères. Une toute nouvelle chaîne doit être construite, puis l'original copié dessus, puis la chaîne d'origine doit être récupérée.
Matt Gregory
Les chaînes @MattGregory sont immuables: Remove, Substring, toute fonction de chaîne génère une nouvelle chaîne. Le remplacement du pointeur d'origine entraîne toujours un garbage collection. Ceci est encore plus lent cependant, car met Enumerable.Reversela chaîne en tampon dans un char[], puis tamponne dans un nouveau char[]qui est 3 plus court, puis génère un nouveau string(avec un autre en interne char[]). Une meilleure approche serait new string("hello".Reverse().Skip(3)), ou simplement écrire votre propre fonction d'extension de chaîne AllBut(this string in, int i)qui utilise Substring.
Wolfzoon
@MattGregory Il ne s'agit même pas de "compter" les caractères d'une chaîne, une chaîne a son Lengthstocké.
Wolfzoon
1
Maintenant, nous avons aussi .SkipLast(n). Pas besoin de rien inverser. "hello".SkipLast(3)donne"he"
Probablement pas exactement ce que vous recherchez puisque vous dites que ce sont des "données dynamiques", mais étant donné votre exemple de chaîne, cela fonctionne également:
Facile. text = text.remove(text.length - 3). J'ai soustrait 3 parce que la Removefonction supprime tous les éléments de cet index jusqu'à la fin de la chaîne qui est text.length. Donc, si je soustrais 3, j'obtiens la chaîne avec 3 caractères supprimés.
Vous pouvez généraliser cela pour supprimer des acaractères à la fin de la chaîne, comme ceci:
text = text.remove(text.length - a)
Donc ce que j'ai fait était la même logique. La removefonction supprime tous les éléments de son intérieur à la fin de la chaîne qui correspond à la longueur du texte. Donc, si je soustrais ade la longueur de la chaîne, cela me donnera la chaîne avec les acaractères supprimés.
Donc, cela ne fonctionne pas seulement pour 3, cela fonctionne pour tous les entiers positifs, sauf si la longueur de la chaîne est inférieure ou égale à a, dans ce cas, elle retournera un nombre négatif ou 0.
Réponses:
Vous pouvez utiliser string.Substring et lui donner l'index de départ et il obtiendra la sous-chaîne à partir de l'index donné jusqu'à la fin.
Modifier , pour le message mis à jour
Pour supprimer les trois derniers caractères de la chaîne, vous pouvez utiliser string.Substring (Int32, Int32) et lui donner l'index de début
0
et l'index de fin trois inférieurs à la longueur de la chaîne . Il obtiendra la sous-chaîne avant les trois derniers caractères.String.Substring, méthode (Int32, Int32)
Vous pouvez également utiliser la méthode String.Remove (Int32) pour supprimer les trois derniers caractères en passant l'index de début comme longueur - 3 , il supprimera de ce point à la fin de la chaîne.
String.Remove, méthode (Int32)
la source
la source
J'ai lu tout cela, mais je voulais quelque chose d'un peu plus élégant. Juste pour supprimer un certain nombre de caractères à la fin d'une chaîne:
production:
la source
Enumerable.Reverse
la chaîne en tampon dans unchar[]
, puis tamponne dans un nouveauchar[]
qui est 3 plus court, puis génère un nouveaustring
(avec un autre en internechar[]
). Une meilleure approche seraitnew string("hello".Reverse().Skip(3))
, ou simplement écrire votre propre fonction d'extension de chaîneAllBut(this string in, int i)
qui utilise Substring.Length
stocké..SkipLast(n)
. Pas besoin de rien inverser."hello".SkipLast(3)
donne"he"
la source
myString = myString.Remove(myString.Length - 3)
C'est.la source
Vous pouvez utiliser
String.Remove
pour supprimer d'une position spécifiée à la fin de la chaîne.la source
Probablement pas exactement ce que vous recherchez puisque vous dites que ce sont des "données dynamiques", mais étant donné votre exemple de chaîne, cela fonctionne également:
la source
str= str.Remove(str.Length - 3);
la source
Voici des exemples de sous-chaîne. >>
http://www.dotnetperls.com/substring
Référez-les.
la source
la source
Supprimer les derniers caractères d'une chaîne
.Text.Remove(10)
// utilisé pour supprimer le texte de l'index 10 à la finla source
Le nouvel opérateur de plage C # 8.0 peut être un excellent raccourci pour y parvenir.
Exemple:
la source
string.Remove()
supprime tous les éléments de cet index jusqu'à la fin.items.length - 3
obtient l'index 3 caractères à partir de la finla source
Facile.
text = text.remove(text.length - 3)
. J'ai soustrait 3 parce que laRemove
fonction supprime tous les éléments de cet index jusqu'à la fin de la chaîne qui esttext.length
. Donc, si je soustrais 3, j'obtiens la chaîne avec 3 caractères supprimés.Vous pouvez généraliser cela pour supprimer des
a
caractères à la fin de la chaîne, comme ceci:Donc ce que j'ai fait était la même logique. La
remove
fonction supprime tous les éléments de son intérieur à la fin de la chaîne qui correspond à la longueur du texte. Donc, si je soustraisa
de la longueur de la chaîne, cela me donnera la chaîne avec lesa
caractères supprimés.Donc, cela ne fonctionne pas seulement pour 3, cela fonctionne pour tous les entiers positifs, sauf si la longueur de la chaîne est inférieure ou égale à
a
, dans ce cas, elle retournera un nombre négatif ou 0.la source