Como separar palavras em String com C# - Blog da Alura
Estou fazendo a manutenção de um ecommerce desenvolvido em C#, nele é feito o cadastro de pessoas onde é inserido o nome e o e-mail. Todos os dados são salvos em um arquivo CSV.
Porém todos os registros de uma pessoa estão contidos em uma única linha do CSV e para fazer a visualização e a filtragem de dados temos um certa dificuldade.
O exemplo abaixo mostra como estou recebendo os dados da pessoa.
string pessoaRecebida = "EliasRibeiro;eliasctrl@live.com";
Só que precisamos mandar um e-mail marketing (newsletter) com as promoções do mês para todos os e-mails cadastrados no ecommerce.
Quando tentamos enviar os e-mails, porém, acabamos tendo erro de envio porque o nome dos usuários veio junto com o e-mail:
Para mandar uma newsletter preciso pegar apenas o e-mail, então temos que fazer a separação dessas 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. Porém, quando eu penso em fazer separações, logo penso em utilizar SubString pois este método faz a separação da string em uma subparte.
Para isso tenho que passar a posição inicial e final que quero separar.
Por exemplo tenho a seguinte string:
string pessoaRecebida = "elias;elias@elias.com";
Para fazer a extração apenas do e-mail. Tenho que passar a posição inicial do e-mail e a posição final. Neste caso a posição inicial é a 6 que é o começo do e-mail e a posição final é a 15 que é quando acaba o e-mail.
string email = pessoaRecebida.Substring(6,15);
Console.WriteLine( email);
Perceba que fazendo a utilização do Substring tenho um ponto ruim, pois, cada vez que eu tenho uma string de pessoaRecebida diferente, eu tenho que mudar os valores- das posições.
Vou tentar fazer a separação do e-mail da Leticia.
string pessoaRecebida = "leticia;leticial@leticia.com";
string email = pessoaRecebida.Substring(6,18);
E vamos ter essa saída:
Não era este tipo de saída que eu gostaria de obter, pois aqui eu tenho uma parte do nome e não tenho o e-mail completo.
Como a função SubString não conseguiu fazer a separação de modo correto, vou ter que buscar mais funções na documentação.
Eu preciso de algo que faça o corte entre o nome e o e-mail e então separe eles em dois. Mas será que existe alguma outra forma de fazer isso?
Ao rever a documentação achei a função Split que faz a separação também. Vamos entender um pouco mais das características dessa função e ver 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 ser o divisor da informação.
No nosso caso seria o ; para fazer a divisão da string, pois esse é o elemento que divide o nome do e-mail na listagem do csv.
string cadastroDoUsuario = "elias;elias@elias.com";
string[] dadosDoCadastro =cadastroDoUsuario.Split(';');
Console.WriteLine(dadosDoCadastro);
O Split vai nos devolver um array de string com duas posições, onde a primeira posição vai ser o nome e a segunda posição vai ser o e-mail. Aqui estamos pegando apenas o array de string por isto vai ser retornado o System.String[], mas queremos pegar apenas o e-mail.
Como é um array eu posso selecionar apenas um dado, no nosso o dado do e-mail, que está na segunda posição do array.
Console.WriteLine(dadosDoCadastro[1]);
elias@elias.com
Com isto toda a pessoa que recebermos iremos conseguir extrair o e-mail do CSV.
Nós começamos com um CSV com vários tipos de dados, onde não podia ser feita a verificação do que era e-mail e o nome, pois, teríamos que pegar a separação do e-mail a mão.
Então teríamos que fazer a separação do dado que nós vamos receber. Optamos por utilizar o método SubString que faz a separação da string que passarmos em subpartes. Porém como o tamanho da string pode mudar, não seria uma boa utilização.
Com tudo isto, procuramos na documentação outro método para nos ajudar e achamos o Split.
Ele faz a separação conforme o valor que vamos passar como parâmetro, então independente do tamanho que nossa string tenha nós vamos conseguir fazer a separação dos valores.