Supprimer les trois derniers caractères d'une chaîne


122

Je souhaite supprimer les trois derniers caractères d'une chaîne:

string myString = "abcdxxx"; 

Notez que la chaîne est des données dynamiques.


1
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.

myString = myString.Substring(0, myString.Length-3);

String.Substring, méthode (Int32, Int32)

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.

myString = myString.Remove(myString.Length-3)

String.Remove, méthode (Int32)

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


13
ce n'est donc pas la réponse
freine le

21
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.
Adil du

26
myString = myString.Remove(myString.Length - 3, 3);

13

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:

string.Concat("hello".Reverse().Skip(3).Reverse());

production:

"he"

7
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"
AjitZero le



5

Vous pouvez utiliser String.Removepour supprimer d'une position spécifiée à la fin de la chaîne.

myString = myString.Remove(myString.Length - 3);

4

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:

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

Supprimer les derniers caractères d'une chaîne

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)// utilisé pour supprimer le texte de l'index 10 à la fin


1

Le nouvel opérateur de plage C # 8.0 peut être un excellent raccourci pour y parvenir.

Exemple:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()supprime tous les éléments de cet index jusqu'à la fin. items.length - 3obtient l'index 3 caractères à partir de la fin


0

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.

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.