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:

  1. 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");

    ResponderEliminar
  2. 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.

    ResponderEliminar