quinta-feira, 5 de maio de 2016

Debug #6 - Recuperar o ultimo valor com split


O método split é utilizado quando é necessário quebrar uma String em várias substrings.

Veja o seguinte código:
public static void main(String[] args) {
        
        // Como entrada temos um diretorio separado por / barra
        String entrada = "C:/Users/Faguinho/Videos/Seriados/Vikings";
                
        // Vamos quebrar nossa entrada em várias substrings
        // usando / para identificar onde nossa string deverá ser quebrada
        // e armaze-las em um vetor de String
        String[] saida = entrada.split("/");
        
        // Esse laço de repetição está pegando cada nova string gerada
        // a partir da nossa string de entrada, e varrendo todo vetor
        // escrevendo na tela a substring armazenada
        for (String substring : saida) {
            System.out.println(substring);
        }
    }

E teremos a seguinte saida:
C:
Users
Faguinho
Videos
Seriados
Vikings
Acabamos de pegar um determinado diretório e separa-lo em várias pastas até chegar na nossa pasta final que é "Vikings" (uma série muito boa, assistam rs).


Debug 6 - Recuperar o ultimo valor com split


Nos usamos o separador "/" para quebras nossa String, mas poderíamos estar usando qualquer marcador para identificar onde nossa String deveria ser quebrada.
Muitas vezes se faz necessários resgatar o ultimo valor de uma String, e para isso existem inúmeras formas de faze-lo um exemplo clássico é o seguinte código:
public static void main(String[] args) {

        String entrada = "C:/Users/Faguinho/Videos/Seriados/Vikings";
        String[] saida = entrada.split("/");
        
        // Criamos uma variavel do tipo String e a inicializamos com null
        String resultado = null;

        // Nesse laço estamos inicializando nossa variavel em 1
        // iremos ficar repetindo esse código enquanto i for menor que a quantidade
        // de substring armazenadas em nosso vetor saida
        // e estamos informando que nosso laço deve somar 1 a cada execução
        for (int i = 1; i < saida.length; i++) {
            resultado = saida[i];
        }
        
        // E aqui escrevemos o nosso resultado
        System.out.println(resultado);
    }

E teremos a saída: "Vikings"

Mas esse exemplo deixa o código extenso, processando todo um vetor para recuperar o último valor, não é nada bom.

Para resolver esse tipo de problema podemos usar o seguinte código:
public static void main(String[] args) {

        String entrada = "C:/Users/Faguinho/Videos/Seriados/Vikings";
        String resultado = entrada.split( "/" )[entrada.split( "/" ).length - 1];
        
        System.out.println(resultado);
    }

Ficou bonito não? rs
Com apenas uma linha resolvemos todos o nosso problema. Vamos a explicação!

Estamos usando matemática para resolver o nosso problema, então primeiro começaremos pelas [], ou seja nosso segundo split: [entrada.split( "/" ).length - 1], estamos simplesmente verificando a quantidade de substrings geradas menos um.
No nosso exemplo teremos o resultado = 5

A expressão ficou igual a entrada.split( "/" )[5], dessa forma o método split remove todos os valores anteriores e recupera apenas o valor que fica logo após a quinta barra.

Execute esse trecho: entrada.split( "/" )[5], e teremos a nossa saída = Vikings
Execute esse trecho: entrada.split( "/" )[4], e teremos a nossa saída = Seriados
Execute esse trecho: entrada.split( "/" )[2], e teremos a nossa saída = Users

Bom, como eu disse existem várias formas de resolver esse problema, e essa é uma das formas que eu uso nos meus códigos.

Até a próxima.
Luiz Fagner Zordan Analista de Sistemas

Graduado em Sistemas de Informação, atualmente trabalhando na Embraer pela FocusNetworks como FullStack. Sou apaixonado por tecnologia, fascinado por jogos e adoro passar o tempo assistindo séries.