Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
Publicado:
Fiz a leitura de um arquivo CSV com as informações de nome, e-mail e pontos de um aluno. Essas informações estão dentro de uma única String:
Alunoaluno=newAluno();
aluno.setNome (* não posso passar a string inteira!!! *);
Pegando um pedaço da String
E agora? Como eu posso pegar um pedaço dessa String e settar no meu aluno? Podemos usar o método da substring(), da classe String, que pega um pedaço dela por meio de 2 parâmetros:
O método substring() pegou justamente o nome do aluno Alex, pois o nome Alex inicia no começo (posição 0) e termina no 4º caractere dessa String, ou seja, para pegar o e-mail eu terei que usar o substring() de novo. Então, vamos verificar qual posição o e-mail está...
O começo é 6, agora o final... 7, 8, 9, 10, 11, 12, 15, 17, 20... Perdi a conta! Que chato! Todas as vezes eu vou precisar ficar contando a dedo a posição do texto?
E se o aluno fosse o Guilherme? Ele não terminaria na 4º posição... Com certeza isso vai dar um problema gigante!
Separando palavras com o split
Além do método substring() a classe String possui o método split() que separa o texto em linhas de acordo com uma regra, por exemplo, quero que meu texto seja separado cada vez que aparecer um ";":
Conseguimos separar as informações do aluno! Note que o split() devolveu um array de String, isso acontece pois ele separa cada linha em Strings diferentes, por essa razão é devolvido o array de String. Agora podemos atribuir cada valor ao meu objeto aluno:
Exception in thread "main" java.lang.NumberFormatException: For inputstring: " 15000"
Cuidados ao usar o split
Parece que a nossa conversão para int não deu certo... Apareceu a exception pois em nossa String temos um espaço (backspace) entre o ";" e as informações, ou seja, em vez de receber apenas o número, foi recebido o espaço junto com o número, por isso não foi possível converter. Se imprimíssemos apenas o e-mail ele também viria com o espaço:
System.out.println(aluno.getEmail());
Imprimindo o email apenas:
alex.vieira@caelum.com.br
Aplicando expressão regular no split
Precisamos informar o split() para que ele tire os espaços também. O split() trabalha em cima de expressão regular, ou seja, podemos especificar as regras utilizando expressão regular. Nesse caso eu irei usar a expressão "\s" que significa espaço em branco:
Funcionou! Porém tem um pequeno detalhe...a expressão regular ";\s" significa que vai ser sempre que tiver ";" e um espaço juntos, ou seja, se a String fosse:
Agora conseguimos pegar todas as informações do aluno que vieram da String. É importante verificar que foram utilizadas duas "\", pois é necessário "escapar" a barra para ser reconhecida dentro da String.
Vimos que quando precisamos separar textos em Java, nós temos o método split() da classe String que tem a capacidade de separar o texto em linhas de acordo com uma regra. No nosso exemplo foi separado em todas as vezes que apareciam ";" ou quando apareciam ";" e espaços juntos. Poderia também ser uma "," ou ":".
O importante é saber que o split() funciona em cima de expressão regular, então qualquer uma delas se aplica.