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

信息:字符串类型的实用程序扩展方法。这个方法的重载可能与空格[与参数中提供的内容]
相同的字符 目的:将所有中间或中间空格修剪为单个空格。
实施例

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;
    }
}
有帮助吗?

解决方案

CollapseSpaces 怎么样?

其他提示

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

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

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

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);
    }
}

在红宝石中,我相信他们称之为 squeeze

NormalizeWhitespace? 这种方式更清楚,处理后会留下可用的值。 正如其他人之前所说,“崩溃”听起来有些严谨,甚至可能意味着它可以返回一个空字符串。

试试这个,它对我有用,并且似乎比递归解决方案复杂得多......

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(' '));

CollapseExtraWhitespace

PaulaIsBrilliant 当然!

makeCompact 怎么样?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top