繁体   English   中英

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

[英]How to replace a char in string with an Empty character in C#.NET

我有一个这样的字符串:

string val = "123-12-1234";

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

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

oldCharnewChar中需要 go 什么。

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

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

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

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

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

这看起来太简单了,但是:

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

MSDN源码

如果您想用空字符替换字符串中的字符,这意味着您要从字符串中删除该字符,请阅读 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);
    }
string val = "123-12-1234";

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

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

      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, "");

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

public static string CleanNumb(string numb) 
{
    foreach (char c in ".,'´")
       numb = numb.Replace(c, ' ');

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

我总是困扰着我不能使用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)因为它“更接近”

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

它总是困扰着我,没有办法“从字符串中删除一个字符”,只能“从字符串中删除字符串”。

我采用了 Alexei Bondarev 的答案的修改版本,并根据标准string.Replace(string, "")对其进行了标记

|               Method |     Mean |     Error |   StdDev |  Gen 0 | Allocated |
|--------------------- |---------:|----------:|---------:|-------:|----------:|
|        StringReplace | 57.28 ns | 14.701 ns | 0.806 ns | 0.0063 |      40 B |
| RemoveCharFromString | 51.62 ns |  4.604 ns | 0.252 ns | 0.0216 |     136 B |

如您所见,结果几乎相同,但“RemoveCharFromString”分配了 3X memory。

道德是 - 坚持String.Replace(string, "")

作为参考,这是我使用的方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM