quinta-feira, agosto 02, 2007

Remover carateres duma string em C#

Normalmente o que faço quando quero remover caracteres de uma string é algo do género: string.Replace("[caracter a remover]", string.Empty). Hoje para formatar uma string que me chegava via um serviço precisava de remover vários caracters diferentes, andei à procura e aparentemente a framework não disponibiliza um método tão básico como retorna-me uma string, retirando esta lista de caracteres à string original. O código do método resultante é o seguinte:
public static string RemoveChars(string toNormalize, List<char> charsToRemove)
{
    StringBuilder toReturn = new StringBuilder(toNormalize.Length);
    CharEnumerator enumerator = toNormalize.GetEnumerator();
            
    while(enumerator.MoveNext())
    {
        if (!charsToRemove.Contains(enumerator.Current))
            toReturn.Append(enumerator.Current);
    }

    return toReturn.ToString();
}

2 comentários:

Anónimo disse...

poderia deixar como extensão á string:

//isso dentro de uma class estática
public static string RemoveChars(this string s, params string[] occurency)
{
string ret = s;
foreach (string occur in occurency)
{
ret = ret.Replace(occur, string.Empty);
}
return ret;
}

assim poderia usar da seguinte maeneira:

string e = "One string that I recgnize".RemoveChars(" ", "o");

Tiago Sousa disse...

Quando escrevi este post ainda não existiam métodos de extensão.

É mais correcta a utilização de StringBuilder do que a implementação que escolheste, devido ao facto de estares a recreares uma referência nova a cada iteração enquanto que no caso do StringBuilder é sempre a mesma referência.