2012-04-05 13 views
25

Hola Estoy tratando de eliminar todo un carácter específico de una cadena. He estado usando String.Replace, PERO NO HACE NADA y no sé por qué. Este es mi código actual.cómo eliminar todas las instancias de un carácter específico de una cadena

public string color; 
    public string Gamertag2; 
    private void imcbxColor_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     uint num; 
     XboxManager manager = new XboxManagerClass(); 
     XboxConsole console = manager.OpenConsole(cbxConsole.Text); 
     byte[] Gamertag = new byte[32]; 
     console.DebugTarget.GetMemory(0x8394a25c, 32, Gamertag, out num); 
     Gamertag2 = Encoding.ASCII.GetString(Gamertag); 
     if (Gamertag2.Contains("^")) 
     { 
      Gamertag2.Replace("^" + 1, ""); 
     } 
     color = "^" + imcbxColor.SelectedIndex.ToString() + Gamertag2; 
     byte[] gtColor = Encoding.ASCII.GetBytes(color); 
     Array.Resize<byte>(ref gtColor, gtColor.Length + 1); 
     console.DebugTarget.SetMemory(0x8394a25c, (uint)gtColor.Length, gtColor, out num); 
    } 

Básicamente recupera el valor de bytes de una cadena de mi Xbox 360, y luego la convierte en forma de cadena. pero quiero que eliminar todas las instancias de "^" String.Replace no parece funcionar. No hace absolutamente nada. Simplemente deja la cuerda como estaba antes. ¿Alguien puede explicarme por qué hace esto?

+0

¿Ha probado la expresión regular? – Sandeep

+2

@Sandeep Regular Expressions complicaría mucho más un problema simple. – Amicable

Respuesta

51

Debe asignar el valor de retorno de String.Replace a la instancia cadena original:

por lo tanto, en lugar de (sin necesidad de que el Contains check)

if (Gamertag2.Contains("^")) 
{ 
    Gamertag2.Replace("^" + 1, ""); 
} 

sólo por esta (¿qué es eso mística +1):?

Gamertag2 = Gamertag2.Replace("^", ""); 
+4

@Ian - No estoy convencido. A menos que haya algo que no nos esté diciendo, 'Gamertag2 = Gamertag2.Replace ("^"," ");' definitivamente eliminará cualquier instancia de "^". Establezca un punto de quiebre después de 'String.Replace' y vea si elimina"^"de' Gamertag2'. – climbage

+2

una cadena es inmutable, lo que significa que debe asignarla a algo. . Reemplazar devolverá una nueva cadena. – Shumii

10

dos cosas:

1) C# Las cadenas son inmutables. Tendrá que hacer esto:

Gamertag2 = Gamertag2.Replace("^" + 1, ""); 

2) "^" + 1? ¿Por qué estás haciendo esto? Básicamente estás diciendo Gamertag2.Replace("^1", ""); que estoy seguro no es lo que quieres.

1

Como dijo climbage, tu problema es definitivamente

Gamertag2.Replace("^"+1,""); 

Esa línea solo eliminará las instancias de "^ 1" de su cadena. Si desea eliminar todas las instancias de "^", lo que quiere es:

Gamertag2.Replace("^",""); 
Cuestiones relacionadas