Come devo chiamare questo metodo di estensione?
-
06-07-2019 - |
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;
}
}
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
?