代码之家  ›  专栏  ›  技术社区  ›  this. __curious_geek

我应该如何命名这个扩展方法?

  •  3
  • this. __curious_geek  · 技术社区  · 14 年前

    我已经为字符串操作编写了一个扩展方法。我很困惑该怎么命名它——因为这将成为团队中前端开发人员将使用的基础库的一部分。这是班级成员的简介。

    信息: 字符串类型的实用程序扩展方法。此方法的重载可以执行除空格以外的字符相同的操作[使用参数中提供的内容]
    用途: 将所有中间或中间空间修剪为单个空间。
    前任:

    string Input = "Hello      Token1    Token2     Token3    World!  ";
    string Output = Input.TrimSpacesInBetween();
    //Output will be: "Hello Token1 Token2 Token3 World!"
    

    我读过(实际上我在读)框架设计指南,但这似乎让我很困扰。

    我想有一些选择……

    TrimIntermediate();  
    TrimInbetween();
    

    以下是要求提供的代码:

    它是递归的。

    public static class StringExtensions
    {
        public static string Collapse(this string str)
        {
            return str.Collapse(' ');
        }
    
        public static string Collapse(this string str, char delimeter)
        {
            char[] delimeterts = new char[1];
            delimeterts[0] = delimeter;
            str = str.Trim(delimeterts);
    
            int indexOfFirstDelimeter = str.IndexOf(delimeter);
            int indexTracker = indexOfFirstDelimeter + 1;
    
            while (str[indexTracker] == delimeter)
                indexTracker++;
    
            str = str.Remove(indexOfFirstDelimeter + 1, indexTracker - indexOfFirstDelimeter - 1);
            string prevStr = str.Substring(0, indexOfFirstDelimeter + 1);
            string nextPart = str.Substring(indexOfFirstDelimeter + 1);
    
            if (indexOfFirstDelimeter != -1)
                nextPart = str.Substring(indexOfFirstDelimeter + 1).Collapse(delimeter);
    
            string retStr = prevStr + nextPart;
    
            return retStr;
        }
    }
    
    9 回复  |  直到 9 年前
        1
  •  14
  •   Konamiman    14 年前

    怎么样 CollapseSpaces ?

        2
  •  7
  •   Jon Skeet    14 年前

    CollapseSpaces 只适用于空格,但为了允许您可能需要的重载 CollapseDelimiters CollapseWhitespace 如果它真的只是各种空白字符。

        3
  •  6
  •   LukeH    14 年前

    不是真正的答案,更多的是对你发布的代码的评论…

    通过使用正则表达式,您可以使该方法更短,更易于理解。(我的猜测是,它也可能比递归字符串操作执行得更好,但您需要进行基准测试以确定是否正确。)

    public static class StringExtensions
    {
        public static string Collapse(this string str)
        {
            return str.Collapse(' ');
        }
    
        public static string Collapse(this string str, char delimiter)
        {
            str = str.Trim(delimiter);
    
            string delim = delimiter.ToString();
            return Regex.Replace(str, Regex.Escape(delim) + "{2,}", delim);
        }
    }
    
        4
  •  2
  •   David    14 年前

    在鲁比,我相信他们称之为 squeeze

        5
  •  2
  •   Rob van Groenewoud    14 年前

    标准化网站空间? 这种方法更清楚的是,在处理之后会留下一个可用的值。 正如其他人之前所说,“折叠”听起来有点严格,甚至可能意味着它可以返回空字符串。

        6
  •  1
  •   Rob van Groenewoud    14 年前

    试试这个,它对我很有用,而且看起来比递归解决方案要简单得多…

    public static class StringExtensions
    {
        public static string NormalizeWhitespace(this string input, char delim)
        {
            return System.Text.RegularExpressions.Regex.Replace(input.Trim(delim), "["+delim+"]{2,}", delim.ToString());
        }
    }
    

    可以这样称呼:

    Console.WriteLine(input.NormalizeWhitespace(' '));
    
        7
  •  0
  •   Andriy Volkov    14 年前

    折叠外部空白

        8
  •  0
  •   Florian Doyon    14 年前

    PaulaIsBrilliant 当然!

        9
  •  0
  •   fastcodejava    14 年前

    如何 makeCompact ?