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

我有一个这样的字符串:

string val = "123-12-1234";

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

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

oldCharnewChar 需要做什么。

【问题讨论】:

  • 为什么投反对票?这可能是一个简单的问题要回答,但这并不能确定它是错误的吗?新用户可能很快就会灰心丧气...
  • 同意彼得凯利 -- 赞成
  • 有人介意解释一下为什么因为过于本地化而关闭?
  • 重复,是,否决,否,过于本地化,否。

标签: c#


【解决方案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"

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

              【讨论】:

                猜你喜欢
                • 2013-01-04
                • 2019-05-09
                • 1970-01-01
                • 1970-01-01
                • 2011-10-20
                • 1970-01-01
                • 2014-07-30
                • 1970-01-01
                相关资源
                最近更新 更多