Como separar palavras em String com C#

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.

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

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!

Veja outros artigos sobre Programação