Prezados, bom dia. Tenho uma dúvida de por quê o código abaixo não funciona:
Substring
privatestaticStringretornarURL(Stringtexto,Stringparametro){Stringurl;intposicaoInicial=0,posicaoFinal;try{// tenta se for HTTPSposicaoInicial=texto.indexOf("https://"+parametro);System.out.println("HTTPS: posição = "+posicaoInicial);}catch(Exceptione){// pega se for HTTPSystem.out.println(e);posicaoInicial=texto.indexOf("http://"+parametro);System.out.println("HTTP: posição = "+posicaoInicial);}finally{posicaoFinal=texto.indexOf("\"",posicaoInicial);System.out.println("Posição inicial: "+posicaoInicial+" / final: "+posicaoFinal);System.out.println("URL 1: "+texto.substring(33954,34011));System.out.println("URL 2: "+texto.substring(posicaoInicial,posicaoInicial));System.out.println("URL 3: "+url);}returnurl;}
Dentro do finally, ele mostra corretamente a posicaoInicial e a posicaoFinal; quando uso o print passando substring especificando os valores (URL 1), ele mostra corretamente o código.
MAS quando passo os parâmetros (mesmo as variáveis estando com o valor correto), não funciona.
Vocês têm alguma ideia do motivo de substring funcionar de forma explícita mas não por parâmetros?
Seria bom colocar alguns exemplos de texto (mas tente fazer uma versão reduzida, pois pelo que parece, o texto original é grande), com casos que funciona e não funciona.
Outro ponto é que não faz muito sentido usar try, pois indexOf não lança exceção se a string não for encontrada (ele retorna -1 quando não encontra).
Outro detalhe é que se não encontrar “https” nem “http”, a posicaoInicial será -1, então era bom ter outra verificação depois, antes de chamar substring.