O que devo citar este método de extensão?
-
06-07-2019 - |
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;
}
}
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
?