HOWTO · Csharp
Remover um caractere de uma string em C#
Existem quatro métodos principais para remover um caractere de uma string em C#: string.Replace(), string.Split() com string.Join(), Regex.Replace() e LINQ.
Nesta página
Para remover um caractere conhecido de uma string C#, chame string.Replace() com esse caractere e string.Empty. Para remover vários caracteres escolhidos, repita a substituição para cada um deles. As strings são imutáveis, portanto cada chamada retorna uma nova string; atribua o resultado se quiser manter a alteração. Use string.Split() com string.Join() quando os caracteres forem delimitadores, Regex.Replace() para um padrão de caracteres ou LINQ quando a regra definir quais caracteres devem ser mantidos. Para remover espaços em branco especificamente, consulte como remover espaços em branco de uma string em C#.
Remover caracteres com string.Replace()
string.Replace() substitui todas as ocorrências de um caractere ou trecho especificado. Substituir um caractere por string.Empty remove suas ocorrências. O exemplo a seguir aplica essa operação a cada item de um conjunto escolhido; o valor retornado por cada chamada passa a ser a entrada da chamada seguinte.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
using System;
class Program
{
static void Main()
{
string text = "Something @to ,Write.;';";
char[] charactersToRemove = { '@', ',', '.', ';', '\'' };
foreach (char character in charactersToRemove)
{
text = text.Replace(character.ToString(), string.Empty);
}
Console.WriteLine(text);
}
}
Something to Write
Para um único caractere, basta uma chamada, por exemplo: text = text.Replace("@", string.Empty);. O método remove todas as correspondências, não apenas a primeira. Se o conjunto escolhido for grande, as chamadas repetidas percorrem a string novamente e criam strings intermediárias; considere usar um filtro de caracteres ou uma expressão regular quando a regra ficar mais clara dessa forma.
Remover delimitadores com string.Split() e string.Join()
string.Split() trata cada caractere especificado como delimitador e retorna os trechos entre eles. string.Join() concatena esses trechos usando o separador informado. Um separador vazio reúne diretamente os trechos restantes, removendo os delimitadores. Essa é outra forma de expressar a operação; não é inerentemente melhor que string.Replace().
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
using System;
class Program
{
static void Main()
{
string text = "Something @to ,Write.;';";
char[] delimiters = { '@', ',', '.', ';', '\'' };
string result = string.Join(string.Empty,
text.Split(delimiters, StringSplitOptions.RemoveEmptyEntries));
Console.WriteLine(result);
}
}
Something to Write
StringSplitOptions.RemoveEmptyEntries descarta os trechos vazios que podem surgir quando os delimitadores estão juntos ou aparecem no início ou no fim. Para a entrada mostrada, juntar os trechos resultantes da divisão produz o mesmo texto visível que o loop de substituição. Use essa abordagem quando dividir em trechos também for útil; para simplesmente excluir caracteres, string.Replace() é mais direto.
Remover caracteres com Regex.Replace()
Regex.Replace() substitui cada trecho correspondente a um padrão de expressão regular. Uma classe de caracteres como [@,.;'] corresponde a qualquer um dos caracteres listados; assim, substituir as correspondências por string.Empty remove esse conjunto escolhido. Caracteres como . têm significado especial em expressões regulares fora de uma classe de caracteres, mas, nesse caso, o ponto é literal.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "Something @to ,Write.;';";
string result = Regex.Replace(text, "[@,.;']", string.Empty);
Console.WriteLine(result);
}
}
Something to Write
Uma expressão regular é útil quando a regra de remoção descreve um padrão, como um intervalo ou uma categoria de caracteres, em vez de uma lista fixa e curta. Escape os metacaracteres da expressão regular quando precisar que correspondam literalmente fora de uma classe de caracteres. Para uma lista fixa, string.Replace() ou string.Split() podem deixar os caracteres pretendidos mais evidentes.
Filtrar caracteres com LINQ
LINQ pode criar uma nova string com os caracteres que atendem a uma condição. Este exemplo mantém espaços em branco, letras e dígitos, removendo a pontuação. Trata-se de um filtro baseado em propriedades, não da remoção de um conjunto arbitrário escolhido pelo chamador: ele mantém todos os caracteres que correspondem à regra, inclusive letras e espaços.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
using System;
using System.Linq;
class Program
{
static void Main()
{
string text = "Something @to ,Write.;';";
string result = new string(text
.Where(character => char.IsWhiteSpace(character)
|| char.IsLetterOrDigit(character))
.ToArray());
Console.WriteLine(result);
}
}
Something to Write
Use LINQ quando a condição para manter os caracteres for a maneira mais clara de expressar o requisito. Se precisar de outro conjunto, substitua char.IsWhiteSpace e char.IsLetterOrDigit por um predicado que corresponda à sua regra. Para uma lista de caracteres exatos fornecida pelo chamador, use o loop de substituição ou um teste de pertencimento equivalente.