【问题标题】:Is there a method for removing whitespace characters from a string?有没有从字符串中删除空格字符的方法?
【发布时间】:2011-11-15 01:03:23
【问题描述】:

是否有 string 类成员函数(或其他)用于从字符串中删除所有空格?类似于 Python 的 str.strip()

【问题讨论】:

  • 只是空格字符还是所有空格? Python 的 strip 默认会删除空格
  • 我要删除所有空格。

标签: c# .net string standard-library


【解决方案1】:

我很惊讶没有人提到这一点:

String.Join("", " all manner\tof\ndifferent\twhite spaces!\n".Split())

string.Split 默认情况下会沿着 char.IsWhiteSpace 的字符拆分,因此这是一个非常相似的解决方案,通过直接使用 char.IsWhiteSpace 过滤掉这些字符,它是一种适用于预 LINQ 环境的单行器也是。

【讨论】:

    【解决方案2】:

    有许多不同的方法,有些比其他更快:

    public static string StripTabsAndNewlines(this string s) {
    
        //string builder (fast)
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++) {
            if ( !  Char.IsWhiteSpace(s[i])) {
                sb.Append();
            }
        }
        return sb.tostring();
    
        //linq (faster ?)
        return new string(input.ToCharArray().Where(c => !Char.IsWhiteSpace(c)).ToArray());
    
        //regex (slow)
        return Regex.Replace(s, @"\s+", "")
    
    }
    

    【讨论】:

      【解决方案3】:

      剥离空间?去掉空格?为什么要重要?仅在我们搜索现有实现时才重要,但我们不要忘记编程解决方案而不是搜索 MSDN 是多么有趣(无聊)。

      您应该能够使用以下 2 个函数中的 1 个从任何字符串中删除任何字符。

      你可以像这样删除任何字符

      static string RemoveCharsFromString(string textChars, string removeChars)
      {
          string tempResult = "";
          foreach (char c in textChars)
          {
              if (!removeChars.Contains(c))
              {
                  tempResult = tempResult + c;
              }
          }
          return tempResult;
      }
      

      或者您可以像这样强制执行字符集(可以这么说)

      static string EnforceCharLimitation(string textChars, string allowChars)
      {
          string tempResult = "";
          foreach (char c in textChars)
          {
              if (allowChars.Contains(c))
              {
                  tempResult = tempResult + c;
              }
          }
      
          return tempResult;
      }
      

      【讨论】:

      • 这很重要,因为与标准的现有技术和实现相比,此解决方案极其缓慢且效率低下......
      • 我们是否又回到了拥有
      • 不,但是如果我的一个开发人员花了几个小时编写一个糟糕的解决方案,比如你的解决方案,而不是谷歌搜索现有的简单、快速和实施良好的解决方案,我会质疑他们的工作。在上面你可以看到我的答案,它以 3 种不同的方式解决问题,所有这些都比你提出的解决方案更有效率。在您的输入字符串中的每个字符中,您枚举 allowedChars str (使用 hashset 进行 O(1) 而不是 O(n) 查找)。不仅如此,对于每个替换,您都创建了一个新字符串,而不是预先分配的数组或 StringBuilder。而你实际上并没有回答这个问题。
      • 我可以发现电。您可以打开灯泡(并使用可变电阻器玩耍)! (;-D)
      • 我在这里并不完全同意@Sam,但我认为声称他的解决方案效率低下,因为 O(n) 与 O(1) 也是不公平的。在这种确切的情况下,允许的字符会很小,因此 O(n) 情况会收敛于 O(1) 情况的实际成本。 Hash->index 是有代价的。如果我们将他的解决方案的周期与哈希集解决方案进行比较,O(n) 在足够小的情况下将优于 O(1)。并且鉴于此成本是针对字符串中的每个字符完成的,可能很大,这种成本是成倍增加的,他的解决方案最终可能会显着提高性能。
      【解决方案4】:

      String.Trim 方法删除尾随和前导空格。它是 Python 的 strip 方法的功能等价物。

      【讨论】:

      • 抱歉,我的问题有点不清楚。我打算从字符串中删除所有空格。你仍然值得 +1。
      【解决方案5】:

      LINQ 在这里感觉有点矫枉过正,将字符串转换为列表,过滤列表,然后将其转换回字符串。为了删除所有空格,我会使用正则表达式。 Regex.Replace(s, @"\s", "")。这是一个常见的习语,可能已经过优化。

      【讨论】:

        【解决方案6】:

        你可以这样做:

        myString = myString.Replace(" ", "");
        

        如果你想删除 所有 个空格字符,你可以使用 Linq,即使语法对于这个用例来说不是很吸引人:

        myString = new string(myString.Where(c => !char.IsWhiteSpace(c)).ToArray());
        

        【讨论】:

          【解决方案7】:

          如果您希望根据 .NET 对什么是空格的判断来替换字符串中的 all 空格(不仅仅是前导和尾随空格),您可以使用一个非常简单的 LINQ 查询来让它工作。

          string whitespaceStripped = new string((from char c in someString
                                                  where !char.IsWhiteSpace(c)
                                                  select c).ToArray());
          

          【讨论】:

          • 应该注意的是,这个与所有其他示例的不同之处在于它删除了所有空格,而不仅仅是空格。这也将删除制表符、换行符、垂直制表符,可能还有其他字符。
          【解决方案8】:

          你可以使用

           StringVariable.Replace(" ","")
          

          【讨论】:

            【解决方案9】:

            是的,String.Trim()

            var result = "   a b    ".Trim();
            

            result 中给出"a b"。默认情况下,所有空格都会被修剪。如果你只想删除空格,你需要输入

            var result = "   a b    ".Trim(' ');
            

            如果要删除字符串中的所有个空格,可以使用string.Replace()

            var result = "   a b    ".Replace(" ", "");
            

            result 中给出"ab"。但这并不等同于 Python 中的str.strip()

            【讨论】:

              【解决方案10】:

              是的,修剪。

              String a = "blabla ";
              var b = a.Trim(); // or TrimEnd or TrimStart
              

              【讨论】:

                【解决方案11】:

                我对 Python 了解不多……

                如果 str.strip() 只是删除开头和结尾的空格,那么您可以在 .NET 中使用 str = str.Trim()... 否则您可以只使用 str = str.Replace ( " ", "") 删除所有空格。

                如果它删除所有空格然后使用

                str = (from c in str where !char.IsWhiteSpace(c) select c).ToString()
                

                【讨论】:

                  【解决方案12】:

                  如果您想删除字符串前面或结尾处的空格,您可能需要查看 TrimStart() 和 TrimEnd() 和 Trim()。

                  【讨论】:

                    猜你喜欢
                    • 2022-03-07
                    • 1970-01-01
                    • 2019-11-25
                    • 2012-02-02
                    • 1970-01-01
                    • 2021-03-30
                    • 2011-09-21
                    • 1970-01-01
                    • 2012-01-06
                    相关资源
                    最近更新 更多