Domanda

Ho scritto un metodo di estensione per la manipolazione delle stringhe. Sono confuso come dovrei chiamarlo - dal momento che questo diventerà parte della libreria di base che gli sviluppatori front-end del team useranno. Ecco il profilo del membro della classe.

Informazioni: metodo di estensione dell'utilità per i tipi di stringa. I sovraccarichi di questo metodo possono fare la stessa cosa caratteri diversi dallo spazio [con quanto fornito nell'argomento]
Scopo: riduce tutti gli spazi intermedi o intermedi al singolo spazio.
Esempio:

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

Ho letto [in effetti sto leggendo] le linee guida del Framework Design ma questo mi sembra infastidire.

Alcune opzioni penso ..

TrimIntermediate();  
TrimInbetween();

Ecco il codice su richiesta:

È ricorsivo ..

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;
    }
}
È stato utile?

Soluzione

Che dire di CollapseSpaces ?

Altri suggerimenti

CollapseSpaces è buono solo per gli spazi, ma per consentire i sovraccarichi potresti voler CollapseDelimiters o CollapseWhitespace se è davvero solo per vari personaggi di spazi bianchi.

Non proprio una risposta, più un commento sul tuo codice pubblicato ...

Potresti rendere il metodo molto più breve e comprensibile usando un'espressione regolare. (La mia ipotesi è che probabilmente avrebbe prestazioni migliori rispetto alle manipolazioni di stringhe ricorsive, ma dovresti fare un benchmark per scoprirlo di sicuro.)

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

In ruby ??credo che lo chiamino squeeze

NormalizzaWhitespace? In questo modo è più chiaro che rimarrà un valore utilizzabile dopo l'elaborazione. Come altri hanno già affermato in precedenza, "Collapse" suona in qualche modo rigoroso e potrebbe anche significare che può restituire una stringa vuota.

Prova questo, funziona per me e sembra essere molto meno complicato di una soluzione ricorsiva ...

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

Può essere chiamato come tale:

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

CollapseExtraWhitespace

PaulaIsBrilliant ovviamente!

In che modo makeCompact ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top