如何在 C#.NET 中用空字符替换字符串中的字符

Posted

技术标签:

【中文标题】如何在 C#.NET 中用空字符替换字符串中的字符【英文标题】:How to replace a char in string with an Empty character in C#.NET 【发布时间】:2011-09-16 10:18:34 【问题描述】:

我有一个这样的字符串:

string val = "123-12-1234";

如何在 C# 中使用空字符串替换破折号。

我的意思是val.Replace(char oldChar, newChar);

oldCharnewChar 需要做什么。

【问题讨论】:

为什么投反对票?这可能是一个简单的问题要回答,但这并不能确定它是错误的吗?新用户可能很快就会灰心丧气... 同意彼得凯利 -- 赞成 How to replace occurrences of "-" with an empty string? 的可能重复项 有人介意解释一下为什么因为过于本地化而关闭? 重复,是,否决,否,过于本地化,否。 【参考方案1】:

您可以使用不同的 Replace() 重载,它采用字符串。

val = val.Replace("-", string.Empty)

【讨论】:

+1 提到替代方法是“重载” 尝试使用上述重载替换 \0 字符,但它不起作用! \0 字符不会被替换。在处理从 Snmp 设备接收的字符串数据时尤其如此 char 到 char 替换重载在这里不起作用的原因 - Why is there no Char.Empty like String.Empty? 我用一个变量代替了上面的“-”,并使用了 charToReplace.ToString()。 请记住,使用Replace时,oldValue的类型必须与newValue相同。前任。 Replace(';',string.Empty.ToCharArray()[0])Replace(";", "") 也可以。【参考方案2】:

由于这里的其他答案,即使正确,也不要明确解决您最初的疑问,我会这样做。

如果您调用string.Replace(char oldChar, char newChar),它将用另一个字符替换出现的字符。这是一对一的替换。因此,结果字符串的长度将是相同的。

您想要的是删除破折号,这显然与用另一个字符替换它们不同。您不能用“无字符”替换它,因为 1 个字符始终是 1 个字符。这就是为什么你需要使用带字符串的重载:字符串可以有不同的长度。如果将长度为 1 的字符串替换为长度为 0 的字符串,效果是破折号消失,替换为“nothing”。

【讨论】:

感谢您的详细解释。 毕竟你没有演示。 :P 哦,好吧。无论如何都要为解释+1 您可以找到更多信息here。【参考方案3】:

这似乎太简单了,但是:

val.Replace("-","");

【讨论】:

【参考方案4】:
val.Replace("-", "");

MSDN Source

【讨论】:

【参考方案5】:
string val = "123-12-1234";

val = val.Replace("-", ""); // result: 123121234

【讨论】:

【参考方案6】:

如果您想用空字符替换字符串中的字符,这意味着您想从字符串中删除该字符,请阅读 R. Martinho Fernandes 的答案。

以下是如何从字符串中删除字符的示例(替换为“空字符”):

    public static string RemoveCharFromString(string input, char charItem)
    
        int indexOfChar = input.IndexOf(charItem);
        if (indexOfChar >= 0)
        
            input = input.Remove(indexOfChar, 1);
        
        return input;
    

或此版本删除字符串中所有重复出现的字符:

    public static string RemoveCharFromString(string input, char charItem)
    
        int indexOfChar = input.IndexOf(charItem);
        if (indexOfChar < 0)
        
            return input;
        
        return RemoveCharFromString(input.Remove(indexOfChar, 1), charItem);
    

【讨论】:

【参考方案7】:

如果您处于循环中,假设您循环浏览要删除的标点符号列表,您可以执行以下操作:

      private const string PunctuationChars = ".,!?$";
          foreach (var word in words)
                
                    var word_modified = word;

                    var modified = false;

                    foreach (var punctuationChar in PunctuationChars)
                    
                        if (word.IndexOf(punctuationChar) > 0)
                        
                            modified = true;
                            word_modified = word_modified.Replace("" + punctuationChar, "");


                        
                    
               //////////MORE CODE
               

诀窍如下:

word_modified.Replace("" + punctuationChar, "");

【讨论】:

【参考方案8】:

我有一个拉丁版本的 Razvan Dumitru 代码,因为我们甚至使用了一百万个指标。我当然使用双重替换:D

public static string CleanNumb(string numb) 

    foreach (char c in ".,'´")
       numb = numb.Replace(c, ' ');

    return numb.Replace(" ", "");

【讨论】:

【参考方案9】:

我一直困扰着我不能使用String.Remove 方法来摆脱字符串中的字符串或字符的实例,所以我通常将这些扩展方法添加到我的代码库中:

public static class StringExtensions

    public static string Remove(this string str, string toBeRemoved)
    
        return str.Replace(toBeRemoved, "");
    

    public static string RemoveChar(this string str, char toBeRemoved)
    
        return str.Replace(toBeRemoved.ToString(), "");

    

不幸的是,采用char 的那个不能使用重载语义,因为它将解析为string.Remove(int startIndex),因为它是"closer"

这当然是纯粹的美学,但我喜欢它......

【讨论】:

以上是关于如何在 C#.NET 中用空字符替换字符串中的字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中用\替换字符串中的“(双引号)”

如何在字符串 C++ 中用“aaa”替换字符“a”?

如何在 Emacs 中用换行符替换字符?

在 Bash 中用另一个字符替换一个字符

批处理中用for指令从文件读取字符串时如何对字符串进行判断

如何在 Vim 中用换行符替换字符