2010-07-16 13 views
8

Quiero hacer esto:¿Hay alguna manera fácil de cambiar un carácter en una cadena en C#?

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

y s se convertirá en "axc". Sin embargo, parece que la cadena [i] solo tiene un getter y no tiene setter. El compilador me da el siguiente error:

"Property or indexer 'string.this[int]' cannot be assigned to -- it is read only"

Supongo que podría hacer un bucle y cambiar el carácter que desee. pero me preguntaba si existe una forma fácil de hacerlo. ¿Y por qué no hay un colocador para la cuerda [i]?

Gracias de antemano.

+2

Las cadenas en C# son inmutables, por lo que no puedes hacer esto. – ChrisF

Respuesta

18

cadenas son inmutables, lo que tiene que hacer una serie char[], cambiarlo y luego hacerlo de nuevo en una cadena:

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

gracias. la segunda línea debe ser char [] arr .... tho :) – StarCub

+0

Lo vi y lo corrigí. Gracias de todos modos :) –

1

No creo que usted puede hacer esto en C#, como la cadena de no puede ser alterado (solo destruido y recreado). Eche un vistazo a la clase StringBuilder.

2

(Su ejemplo es un poco mal:. S [2] = 'x' debe cambiarlo a "ABX")

No, no puedes, ya que las cadenas son inmutables, usted tiene que crear una nueva cadena :

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

Debe utilizar un método que devuelva una nueva cadena con la modificación deseada.

Espero que ayude!

+0

por supuesto! gracias por señalar eso! lol – StarCub

13

cadenas son inmutables por lo que no hay ningún organismo, que sin embargo puede utilizar un generador de cadenas:

StringBuilder s = new StringBuilder("abc"); 

s[1] = 'x'; 
2

Recuerde, en gestionada y segura .Net, las cadenas son inmutables, por lo que incluso si se pudiera hacer lo anterior , realmente estarías creando una nueva copia de la cadena con el reemplazo.

Si solo está reemplazando un personaje, un bucle simple es probablemente su mejor opción.

Sin embargo, si se va a hacer múltiples sustituciones, considerar el uso de un StringBuilder:

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

debe ser stringBuilder [1] = 'x' no stringBuilder [2]. Esto devuelve abx. – btlog

+0

@btlog - Corregido. Ejército de reserva. –

0

¿Qué es todo esto?

string originalString = "abc"; 

     var index = 1; 
     char charToReplace = 'x'; 

     var newString = string.Format("{0}{1}{2}", originalString.Substring(0, index), charToReplace, originalString.Substring(index + 1)); 
+2

Qué tal la cadena newString = originalString.Remove (index, 1) .Insert (index, charToReplace) – btlog

0

sí en C# cadena no se puede alterar.

pero podemos tratar este

string s = "abc"; 
s = s.Replace('b', 'x'); 
Console.WriteLine(s); 

respuesta será "axc". ya que esto reemplazará a la cadena anterior con una cadena nueva.

+0

Pero si la cadena contiene varias "b" y solo quiere reemplazar la primera, esto no funcionará. – ChrisF

1

Por qué no hacer esto si usted está usando alguna de LINQ

private string ConvertStr(string inStr , int inIndex , char inChar) 
{ 
char[] tmp = inStr.ToCharArray(); 
tmp.SetValue(inChar , inIndex); 
return new string(tmp); 
} 

Eso debería dejar que lo sustituya carbón que quiera con lo que deseas carbón.

Cuestiones relacionadas