Pergunta

Eu escrevi um método de extensão para a manipulação de cadeia. Estou confuso o que eu deveria nomeá-lo - já que isso vai se tornar parte da biblioteca de base de desenvolvedores front-end em que a equipe irá utilizar. Aqui está o perfil do membro da classe.

Info: método Utility extensão para tipos de corda. Sobrecargas desse método pode fazer a mesma coisa que não espaço [com o fornecido no argumento]
caracteres Objectivo:. Trims para baixo toda intermediária ou in-between espaços para o espaço único
Ex:

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

Eu li [na verdade eu estou lendo] as diretrizes de design Framework mas isso parece estar me incomodando.

Algumas opções eu acho ..

TrimIntermediate();  
TrimInbetween();

Aqui está o código a pedido:

É recursivo ..

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;
    }
}
Foi útil?

Solução

E sobre CollapseSpaces?

Outras dicas

CollapseSpaces é bom para espaços apenas, mas para permitir as sobrecargas que você pode querer CollapseDelimiters ou CollapseWhitespace se é realmente só vai ser para vários caracteres em branco.

Não é realmente uma resposta, mais um comentário no seu código postado ...

Você poderia tornar o método muito mais curto e mais compreensível, usando uma expressão regular. (Meu palpite é que ele provavelmente teria um melhor desempenho do que as manipulações de string recursiva também, mas você precisa de referência para descobrir com certeza.)

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

Em Ruby Eu acredito que eles chamam este squeeze

NormalizeWhitespace? Desta forma, é mais claro que haverá um valor utilizável esquerda após o processamento. Como outros já afirmado anteriormente, 'Collapse sons pouco rigorosos e pode até significar que ele pode retornar uma string vazia.

Tente isso, ele trabalha para mim e parece ser muito menos complicado do que uma solução recursiva ...

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

Ele pode ser chamado como tal:

Console.WriteLine(input.NormalizeWhitespace(' '));

CollapseExtraWhitespace

PaulaIsBrilliant claro!

Como é makeCompact?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top