【问题标题】:How to remove all whitespace characters from a String?如何从字符串中删除所有空白字符?
【发布时间】:2018-03-04 00:06:57
【问题描述】:

亲爱的程序员们,

我正在 C# Visual Studio 2013 中编写一些代码,我刚刚意识到我可能不需要在使用 Trim() 时使用 Replace(" ", string.Empty)。

一个例子如下:

SanitizedString = RawString
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty)
    .Trim();

因为我之前的代码结构不同,所以我没有注意到它:

SanitizedString = RawString.Trim()
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty);

我知道这些方法的工作方式不同,Trim() 删除所有空白字符,而 Replace(" ", string.Empty) 仅删除空格字符。

这就是为什么我有一个不同的问题。

我没有看到任何明显的方法可以通过 Replace 来实现。我的问题是,当我希望从字符串中删除所有空白字符时,我该怎么做?

我发现了以下内容:

Efficient way to remove ALL whitespace from String?

但是由于我从来没有使用过正则表达式,所以我犹豫如何将它应用于字符串?

【问题讨论】:

  • SanitizedString = Regex.Replace(Raw...., @"\s+", string.Empty);
  • 所有的空白——即使在中间?

标签: c# string whitespace


【解决方案1】:

尝试使用 Linq 以过滤掉空格:

  using System.Linq;

  ... 

  string source = "abc    \t def\r\n789";
  string result = string.Concat(source.Where(c => !char.IsWhiteSpace(c)));

  Console.WriteLine(result);

结果:

abcdef789

【讨论】:

    【解决方案2】:

    一种方法是使用正则表达式

    public static string ReplaceAllWhiteSpaces(string str) {
      return Regex.Replace(str, @"\s+", String.Empty);
    }
    

    取自:https://codereview.stackexchange.com/questions/64935/replace-each-whitespace-in-a-string-with-20

    【讨论】:

      【解决方案3】:

      这个问题的答案并不像看起来那么容易。问题不是实际编写替换代码,而是定义什么是空白。

      例如,this Wikipedia article 列出了许多具有 Unicode 属性 WSpace 的字符(Unicode 代码点),以及许多大多数人认为是空白但没有 WSpace 属性的相关字符.

      鉴于此,我永远不会依赖某些正则表达式解析器认为的 \s,因为这实际上不是标准化的。我很确定 C# 的正则表达式解析器不会将 U+2001 之类的代码点视为空格,因此它们不会从您的字符串中删除。

      这对您的应用程序来说可能是也可能不是问题;这取决于首先如何过滤您必须处理的字符串。但是,如果您要处理外语字符串(换句话说:包含 ASCII 范围之外的字符的字符串),您将不得不考虑它。

      这样做时,请记住正则表达式很慢。如果您无论如何都需要定义自己的替换(出于上述原因),您应该使用更轻量级的替换功能(如果 C# 或其程序集提供 - 我不使用 C#,所以我不知道)。

      【讨论】:

        【解决方案4】:
           string Abcd = Console.ReadLine();
                string wspace = "";
                            int len = Abcd.Length;
                for (int i = 0; i <= len-1; i++)
                {
                    if (Abcd[i] != ' ')
                    {
                        wspace = wspace + Abcd[i];
                    }
        
                }
                Console.WriteLine("The Sring Without Space Is= '"+wspace+"'");
                Console.ReadLine();
        

        【讨论】:

          【解决方案5】:

          只需在方法调用中传递字符串,它将返回没有空格的字符串。

           public static string RemoveSpaces(this String Value)
              {
                  RegexOptions options = RegexOptions.None;
                  Regex regex = new Regex(@"[ ]{2,}", options);
                  return regex.Replace(Value.Trim(), @" ");
              }
          

          【讨论】:

            【解决方案6】:

            对于访问此页面的任何人,有一篇出色的 CodeProject 文章,作者在该文章中针对此问题对几种不同的解决方案进行了基准测试。他提出的最快的完全托管解决方案(基本上)如下:

            public static string RemoveAllWhitespace(string str) {
                var len = str.Length;
                var src = str.ToCharArray();
                var dstIdx = 0;
                for (var i = 0; i < len; i++) {
                    var ch = src[i];
                    switch (ch) {
                        case '\u0020': case '\u00A0': case '\u1680': case '\u2000': case '\u2001':
                        case '\u2002': case '\u2003': case '\u2004': case '\u2005': case '\u2006':
                        case '\u2007': case '\u2008': case '\u2009': case '\u200A': case '\u202F':
                        case '\u205F': case '\u3000': case '\u2028': case '\u2029': case '\u0009':
                        case '\u000A': case '\u000B': case '\u000C': case '\u000D': case '\u0085':
                            break;
                        default:
                            src[dstIdx++] = ch;
                            break;
                    }
                }
                return new string(src, 0, dstIdx);
            }
            

            对于什么是正确的空白字符集,当然有许多警告和潜在的意见分歧,但基本信息非常有用(比如 RegEx 是迄今为止最慢的)。

            全文在这里:https://www.codeproject.com/Articles/1014073/Fastest-method-to-remove-all-whitespace-from-Strin

            注意:我与作者或 CodeProject 无关。我只是通过普通的网络搜索找到了这篇文章。

            【讨论】:

              【解决方案7】:

              这可能很方便:

              string message = Console.ReadLine().Trim().ToLower();
              
              string message_without_space = message.Split(' ').Aggregate((a, b) => a + b).ToString();
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-11-04
                • 2011-08-24
                • 2023-04-08
                • 2016-05-30
                相关资源
                最近更新 更多