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.

user1765862
la source
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

Adil
la source
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);
Alex
la source
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"
Byron Katz
la source
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
9
myString.Remove(myString.Length-3);
Adeel
la source
3
myString = myString.Remove(myString.Length - 3)C'est.
A-Sharabiani
6
string test = "abcdxxx";
test = test.Remove(test.Length - 3);
//output : abcd
Jaidi Wael Leila
la source
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);
lc.
la source
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"
Mike Lowery
la source
3

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

Scofield
la source
2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);
Frank59
la source
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

subramanya46
la source
1

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

Exemple:

var shortenedString = myString[0..^1]
vullnetyy
la source
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

Ben Rauzi
la source
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.

zixuan
la source