Question

J'ai écrit une méthode d'extension pour la manipulation de chaînes. Je ne comprends pas comment le nommer, car cela fera partie de la bibliothèque de base que les développeurs utiliseront dans l'équipe. Voici le profil du membre de la classe.

Info: Méthode d'extension de l'utilitaire pour les types de chaîne. Les surcharges de cette méthode peuvent faire la même chose avec des caractères autres que l'espace [avec ce qui est fourni en argument]

Objet: réduit tous les espaces intermédiaires ou intermédiaires en un seul espace.
Ex:

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

J'ai lu [en fait, je lis] les directives relatives à la conception du framework, mais cela semble me déranger.

Certaines options, je pense.

TrimIntermediate();  
TrimInbetween();

Voici le code sur la requête:

C'est récursif ..

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;
    }
}
Était-ce utile?

La solution

Qu'en est-il de CollapseSpaces ?

Autres conseils

CollapseSpaces convient aux espaces, mais pour permettre les surcharges, vous souhaiterez peut-être CollapseDelimiters ou CollapseWhitespace s'il s'agit vraiment pour divers caractères d'espacement.

Ce n'est pas vraiment une réponse, mais un commentaire sur votre code posté ...

Vous pouvez rendre la méthode beaucoup plus courte et plus compréhensible en utilisant une expression régulière. (Je suppose que cela fonctionnerait probablement mieux que les manipulations récursives de chaînes aussi, mais vous auriez besoin de points de repère pour le savoir à coup sûr.)

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

En ruby, je pense qu'ils appellent cela squeeze

NormalizeWhitespace? Cette manière est plus claire qu’il restera une valeur utilisable après le traitement. Comme d'autres l'ont déjà indiqué, "Collapse" semble rigoureux et peut même signifier qu'il peut renvoyer une chaîne vide.

Essayez ceci, cela fonctionne pour moi et semble être beaucoup moins compliqué qu'une solution récursive ...

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

On peut l'appeler ainsi:

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

CollapseExtraWhitespace

PaulaIsBrilliant bien sûr!

Comment makeCompact ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top