Como separar palavras em String com C#
Estou fazendo a manutenção de um e-commerce desenvolvido em C#. Nele é feito o cadastro de pessoas em que são inseridos o nome e o e-mail, e todos os dados são salvos em um arquivo CSV.
Porém, os registros de uma pessoa estão todos contidos em uma única linha do CSV, dificultando a visualização e a filtragem de dados. O exemplo abaixo mostra como estou recebendo os dados da pessoa:
string pessoaRecebida = “EliasRibeiro;[email protected]”;
Acontece que precisamos mandar uma newsletter com as promoções do mês para todos os e-mails cadastrados no e-commerce. E, quando tentamos enviar os e-mails, temos um erro de envio porque o nome dos usuários veio junto com o e-mail, como mostra o exemplo acima.
Para mandar uma newsletter, precisamos pegar apenas o e-mail. Para fazer isso, precisamos separar as duas informações. Como podemos fazer isso?
Fazendo a separação com Substring()
Temos algumas alternativas para pegar apenas uma parte de texto dentro de uma string. Quando o assunto é fazer separações em uma string, logo penso em utilizar Substring()
, pois este método separa uma string em uma subparte.
Para fazer isso, precisamos passar a posição inicial e a posição final que quero separar. Por exemplo, temos a seguinte string:
string pessoaRecebida = "elias;[email protected]";
Para fazer a extração apenas do e-mail, temos que passar a posição inicial do e-mail e a posição final. Nesse caso, a posição inicial é a 6 (o começo do e-mail) e a posição final é a 15 (o fim do e-mail):
string pessoaRecebida = "elias;[email protected]";
string email = pessoaRecebida.Substring(6,15);
Console.WriteLine(email);
Perceba que utilizando o Substring()
temos uma desvantagem, pois cada vez que tivermos uma string de pessoaRecebida
diferente, precisamos mudar os valores das posições. Vamos tentar fazer a separação com o e-mail de outra pessoa:
string pessoaRecebida = "leticia;[email protected]";
string email = pessoaRecebida.Substring(6,18);
Console.WriteLine(email);
Teremos a seguinte saída:
a;leticia@leticia.
Não era este tipo de saída que estamos esperando, pois temos uma parte do nome e o e-mail está incompleto.
Como o método Substring()
não conseguiu fazer a separação de modo correto, precisamos buscar outra solução na documentação.
Precisamos de algo que faça o corte entre o nome e o e-mail e então separe-os em duas partes. Mas será que existe alguma outra forma de fazer isso?
Ao rever a documentação, encontramos o método Split()
que também faz a separação de strings. Vamos entender melhor as características desse método e por que ele se encaixa melhor.
Fazendo a separação com Split()
Já que não conseguimos fazer a separação utilizando o Substring()
, vamos fazer a separação usando o Split()
. Ele faz a separação dos valores conforme o parâmetro que indicamos como divisor da informação.
No nosso caso seria o ;
para fazer a divisão da string, pois é o elemento que divide o nome do e-mail na listagem do CSV.
string cadastroDoUsuario = "elias;[email protected]";
string[] dadosDoCadastro =cadastroDoUsuario.Split(';');
Console.WriteLine(dadosDoCadastro);
System.String[]<br>
O Split()
vai devolve um array de string com duas posições, em que a primeira posição vai ser o nome e a segunda posição vai ser o e-mail. Estamos pegando apenas o array de string, e por isso vai ser retornado o System.String[]
, mas queremos apenas o e-mail.
Por ser um array, podemos selecionar apenas um dado (no nosso caso, o e-mail), que está na segunda posição do array:
string cadastroDoUsuario = "elias;[email protected]";
string[] dadosDoCadastro =cadastroDoUsuario.Split(';');
Console.WriteLine(dadosDoCadastro[1]);
[email protected]
Usando o Split()
conseguimos extrair o e-mail de todas as pessoas que recebermos no CSV.
Conclusão
Iniciamos o artigo com um CSV com vários tipos de dados, em que não era possível fazer a verificação do que era e-mail e nome, pois teríamos de separar essas informações manualmente.
Começamos fazendo a separação do dado que queremos receber. Inicialmente, optamos pelo método Substring()
, que separa a string em subpartes. Porém, como o tamanho da string pode variar, esse método não era a melhor solução para o nosso caso.
Então, encontramos na documentação o método Split()
, que faz a separação conforme o valor que vamos passar como parâmetro, então, seja qual for o tamanho da nossa string, conseguimos separar os valores que queremos.
E aí, o que achou do post? Agora ficou mais fácil trabalhar com strings no C#, não acha? Se quiser continuar estudando o assunto, dê uma olhada nos cursos de C# da Alura e continue aprendendo!