Что я должен назвать этот метод расширения? - PullRequest
3 голосов
/ 28 октября 2009

Я написал метод расширения для работы со строками. Я запутался, как мне назвать это - так как это станет частью базовой библиотеки, которую разработчики команды будут использовать. Вот профиль участника класса.

Информация: Метод расширения служебной программы для строковых типов. Перегрузки этого метода могут делать то же самое, что и символы, кроме пробела [с тем, что указано в аргументе]
Цель: Обрезает все промежуточные или промежуточные пробелы до одного пробела.
Ex:

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 ]

14 голосов
/ 28 октября 2009

А как же CollapseSpaces?

7 голосов
/ 28 октября 2009

CollapseSpaces подходит только для пробелов, но для учета перегрузок вы можете захотеть CollapseDelimiters или CollapseWhitespace, если это действительно просто для различных пробельных символов.

6 голосов
/ 28 октября 2009

Не совсем ответ, больше комментирует ваш опубликованный код ...

Вы можете сделать метод намного короче и понятнее, используя регулярное выражение. (Я предполагаю, что он, вероятно, будет работать лучше, чем рекурсивные манипуляции со строками, но вам нужно будет провести тестирование, чтобы узнать наверняка.)

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);
    }
}
2 голосов
/ 28 октября 2009

NormalizeWhitespace? Этот способ более понятен, так как после обработки останется пригодное для использования значение. Как уже говорилось ранее, «Свернуть» звучит довольно строго и может даже означать, что он может вернуть пустую строку.

2 голосов
/ 28 октября 2009

В рубине я считаю, что они называют это squeeze

1 голос
/ 28 октября 2009

Попробуйте, это работает для меня и кажется намного менее сложным, чем рекурсивное решение ...

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(' '));
0 голосов
/ 27 декабря 2009

Как это makeCompact?

0 голосов
/ 28 октября 2009

PaulaIsBrilliant конечно!

0 голосов
/ 28 октября 2009

CollapseExtraWhitespace

...