如何从字符串中删除所有特定字符的实例?

51

我尝试从字符串中删除所有特定字符。 我一直在使用String.Replace,但它没有任何作用,而且我不知道为什么。 这是我当前的代码:

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

这仅仅保留了原字符串。有人能否解释一下为什么呢?


你尝试过正则表达式吗? - Sandeep
4
正则表达式会让一个简单的问题变得过于复杂。 - Amicable
4个回答

94
你必须将 String.Replace 的返回值赋给原始字符串实例:
因此,应该这样写(不需要进行Contains检查):
if (Gamertag2.Contains("^"))
{
    Gamertag2.Replace("^" + 1, "");
}

只需要这个(那个神秘的+1是什么意思?):

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

4
@Ian - 我还没有被说服。除非你有什么没有告诉我们的事情,否则Gamertag2 = Gamertag2.Replace("^", ""); 绝对会移除任何 "^" 的实例。在 String.Replace 之后设置一个断点,看看它是否从 Gamertag2 中移除了 "^"。 - Mike Park
5
一个字符串是不可变的 - 这意味着您需要将其赋值给某个变量。.Replace方法会返回一个新的字符串。 - Shumii
这会替换所有出现的内容还是只替换第一个匹配? - yılmaz
@yılmaz 所有出现的地方 - Tim Schmelter
1
我已经写了多年的C#,但有时仍会犯这个错误!我希望可以配置Visual Studio,在没有分配的情况下警告这些无用的方法调用(https://stackoverflow.com/q/26280971/12484)。 - Jon Schneider
@JonSchneider:在这种情况下,我收到了“未使用纯方法的返回值”的警告。这再次提醒我尽可能使用“Pure”属性来装饰我的方法,谢谢 :) - Tim Schmelter

15

有两件事情需要注意:

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

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

2) 为什么要写"^" + 1?你实际上是在执行Gamertag2.Replace("^1", "");,我相信这不是你想要的。


3

就像climbage所说,你的问题绝对是

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

这行代码只会从你的字符串中删除 "^1"。如果你想要删除所有的 "^",你需要使用以下代码:

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

0

我知道这个线程已经很旧了,而且我的解决方案可能极其低效,但它可以替换字符串的所有出现。我发现如果我想用 "\r\n\r\n" 替换 "\r\n\r\n\r\n",单独使用 Replace() 是无法捕获全部的。

因此,这样做:

do // First get rid of spaces like "  \r"
{
  str = str.Replace(" \r","\r")
} while (str.Cointains(" \r"));

do // Then remove the CrLf's in surplus.
{
  str = str.Replace("\r\n\r\n\r\n","\r\n\r\n")
} while (str.Cointains("\r\n\r\n\r\n"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接