8 votes

Existe-t-il un moyen simple de modifier un caractère dans une chaîne de caractères en C# ?

Je veux le faire :

string s = "abc";
s[1] = 'x';

et s deviendra "axc". Cependant, il semble que string[i] n'ait qu'un getter et pas de setter. Le compilateur me donne l'erreur suivante :

"Propriété ou indexeur 'string.this[int]' ne peut pas être assigné -- il est en lecture seule"

Je pense que je pourrais faire une boucle et changer le caractère que je veux, mais je me demandais juste s'il y avait un moyen facile de le faire ? Et pourquoi il n'y a pas de setter pour string[i] ?

Merci d'avance.

20voto

Callum Rogers Points 6769

Les chaînes de caractères sont immuables, vous devez donc créer un fichier char[] le modifier, puis le retransformer en chaîne de caractères :

string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);

13voto

JLWarlow Points 2035

Les chaînes sont immuables, c'est pourquoi il n'y a pas de setter. Vous pouvez cependant utiliser un constructeur de chaînes :

StringBuilder s = new StringBuilder("abc");

s[1] = 'x';

2voto

Kieren Johnstone Points 19499

(Votre exemple est légèrement erroné : s[2] = 'x' devrait être remplacé par "abx").

Non, puisque les chaînes sont immuables, vous devez créer une nouvelle chaîne :

http://en.wikipedia.org/wiki/Immutable_object

Vous devez utiliser une méthode qui renvoie une nouvelle chaîne avec la modification souhaitée.

J'espère que cela vous aidera !

2voto

Rob Levine Points 20793

Rappelez-vous qu'en .Net géré et sécurisé, les chaînes sont immuables, donc même si vous pouviez faire ce qui précède, vous créeriez en réalité une nouvelle copie de la chaîne avec le remplacement.

Si vous ne remplacez qu'un seul caractère, une simple boucle est probablement la meilleure solution.

Toutefois, si vous devez procéder à des remplacements multiples, envisagez d'utiliser un StringBuilder :

  string s = "abc";
  var stringBuilder = new StringBuilder(s);
  stringBuilder[1] = 'x';
  s = stringBuilder.ToString();

1voto

pm_2 Points 3307

Je ne pense pas que vous puissiez faire cela en C#, car la chaîne ne peut pas être modifiée (seulement détruite et recréée). Jetez un coup d'œil à la fonction StringBuilder classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X