2009-06-01 7 views
5

El siguiente segmento de código C# no parece hacer nada:String.Replace no parece sustituir los soportes con cadena vacía

String str = "{3}"; 
str.Replace("{", String.Empty); 
str.Replace("}", String.Empty); 

Console.WriteLine(str); 

Esto termina escupiendo: {3}. No tengo idea de por qué es esto. Hago este tipo de cosas en Java todo el tiempo. ¿Hay algún matiz de manejo de cadenas .NET que me elude?

Brian

+0

Posible duplicado de http: // stackoverflow.com/questions/1948978/string-replace-not-working. Este fue el primero, pero el otro tiene un título más claro. – goodeye

Respuesta

18

La clase String es immutable; str.Replace no alterará str, devolverá una nueva cadena con el resultado. Prueba este lugar:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
5

supongo que tendrá que hacer

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 

Mira el String.Replace referencia:

Valor de retorno Tipo: System.String

Una cadena equivalente a esta instancia pero con todas las instancias de oldValue reemplazado con newValue.

5

La función Reemplazar devuelve la cadena modificada, por lo que debe asignarla a su variable str.

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
6

Str.Replace devuelve una nueva cadena. Por lo tanto, debe usarlo de la siguiente manera:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 
7

Reemplazar en realidad no modifica la instancia de cadena en la que lo llama. Simplemente devuelve una copia modificada.

Intente éste:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
8

cadena es inmutable; no puedes cambiar una instancia de una cadena. Sus dos llamadas Reemplazar() no hacen nada con la cadena original; devuelven una cadena modificada. Desea esto en su lugar:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 

Funciona de esta manera en Java también.

4

Creo que str.Replace devuelve un valor que debe asignar a su variable. Por lo que tendrá que hacer algo como:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
3

El método Replace devuelve una cadena con el reemplazo. Lo que creo que está buscando es la siguiente:

str = str.Replace("{", string.Empty); 
str = str.Replace("}", string.Empty); 

Console.WriteLine(str); 
3

además de todas las sugerencias hasta el momento - también se puede lograr esto sin cambiar el valor de la cadena original mediante el uso de las funciones de reemplazar en línea en la salida ..

String str = "{3}"; 

Console.WriteLine(str.Replace("{", String.Empty).Replace("}", String.Empty)); 
Cuestiones relacionadas