2012-04-05 44 views
25

您好,我正在尝试从字符串中删除所有特定字符。我一直在使用String.Replace,但它没有什么,我不知道为什么。这是我现在的代码。如何从字符串中删除特定字符的所有实例

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); 
    } 

它基本上从我的Xbox 360中检索字符串的字节值,然后将其转换为字符串形式。但我希望它删除“^”的所有实例String.Replace似乎没有工作。它绝对没有。它只是像以前一样留下字符串。任何人都可以向我解释为什么它会这样吗?

+0

你试过正则表达式吗? – Sandeep 2012-04-05 02:16:03

+2

@Sandeep正则表达式会过度简化一个简单的问题。 – Amicable 2014-04-17 12:53:12

回答

51

必须的String.Replace的返回值分配到原来的字符串实例:

因此而不是(无需为Contains check)

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

只是这(那是什么神秘+1):

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

@Ian - 我不相信。除非你没有告诉我们什么,'Gamertag2 = Gamertag2.Replace(“^”,“”);''一定会删除任何“^”的实例。在'String.Replace'后面设置一个断点,看它是否从'Gamertag2'中删除了“^”。 – climbage 2012-04-05 02:37:59

+2

一个字符串是不可变的 - 这意味着你需要将它分配给某个东西。 .Replace会返回一个新的字符串。 – Shumii 2015-01-13 15:40:27

10

两件事:

1)C#字符串是不可变的。您需要这样做:

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

2)"^" + 1?你为什么做这个?你基本上是说Gamertag2.Replace("^1", "");,我敢肯定你不是你想要的。

1

喜欢爬虫说,你的问题肯定是

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

该行只会从字符串中删除“^ 1”的实例。如果你想删除所有“^”的实例,你想要的是:

Gamertag2.Replace("^",""); 
相关问题