Olá pessoal,
Depois de um tempo, consegui fazer o trabalho mas acredito que ficou ainda incompleto, pois existe um item que não ficou legal... pois não consegui imaginar como faço para fazer esse teste. estou me referindo ao item "g) Um método para, dado uma string WWW, retornar verdadeiro ou false se os domínios são iguais " o que eu fiz, executa a comparação mas acredito não ser o ideal... pois o item pede para comparar os dominios e não o recurso.
Se alguem tiver alguma ideia de como fazer isso, aceito sugestões.
Para voces testarem é só rodar o testaWWW
abaixo o código para teste.
public class EnderecoWEB {
// solução para o item a)
private String dominio;
private int porta;
private String recurso;
// Construtores pedidos no item b)
public EnderecoWEB(String dom, int port, String rec) {
dominio = dom;
porta = port;
recurso = rec;
}
// solução para o item c)
public EnderecoWEB(String endereco) {
dominio = "";
porta = 0;
recurso = "";
if (this.verificaConsistencia(endereco)) {
dominio = EnderecoWEB.obtemDominio(endereco);
porta = EnderecoWEB.obtemPorta(endereco);
recurso = EnderecoWEB.obtemRecurso(endereco);
}
}
// Métodos do item d)
public static String obtemDominio(String endereco) {
String inicioPadrao = "http://", dominio;
if (endereco.startsWith(inicioPadrao))
endereco = endereco.substring(inicioPadrao.length(), endereco.length());
int fimDominio = endereco.indexOf(':');
if (fimDominio == -1) {
fimDominio = endereco.indexOf('/');
if (fimDominio == -1)
fimDominio = endereco.length();
}
dominio = endereco.substring(0, fimDominio);
return dominio;
}
public static int obtemPorta(String endereco) {
int fimDominio, fimPorta, porta;
String inicioPadrao = "http://", sporta;
if (endereco.startsWith(inicioPadrao))
endereco = endereco.substring(inicioPadrao.length(),
endereco.length());
fimDominio = endereco.indexOf(':');
if (fimDominio == -1)
porta = 80;
else {
fimPorta = endereco.indexOf('/', fimDominio);
if (fimPorta == -1)
fimPorta = endereco.length();
sporta = endereco.substring(fimDominio + 1, fimPorta);
porta = Integer.parseInt(sporta);
}
return porta;
}
public static String obtemRecurso(String endereco) {
int inicioRecurso;
String inicioPadrao = "http://", recurso;
if (endereco.startsWith(inicioPadrao))
endereco = endereco.substring(inicioPadrao.length(),
endereco.length());
inicioRecurso = endereco.indexOf('/');
if (inicioRecurso != -1)
recurso = endereco.substring(inicioRecurso+1, endereco.length());
else
recurso = null;
return recurso;
}
// metodo para solução do item e)
/* neste caso a porta só será exibida caso a porta seja diferente de 80.
* Se a porta for 80 essa será omitida e a URL será apresentada na tela completa
*/
public void exibe() {
String saida = "URL solicitada: " + "http://" + dominio;
if (porta != 80) {
saida = saida + ":" + porta;
}
if (recurso != null) {
saida = saida + "/" + recurso;
}
System.out.println(saida);
}
// Métodos de obtenção e alteração de campos solicitados no item d)
public String getDominio() {
return dominio;
}
public void setDominio(String dominio) {
this.dominio = dominio;
}
public int getPorta() {
return porta;
}
public void setPorta(int porta) {
this.porta = porta;
}
public String getRecurso() {
return recurso;
}
public void setRecurso(String recurso) {
this.recurso = recurso;
}
// Item f)
public boolean verificaConsistencia (String endereco) {
if ((endereco.startsWith("http") || endereco.startsWith("www")) &&
!(endereco.contains("*")) &&
!(endereco.contains("@")) &&
!(endereco.contains("%")) &&
!(endereco.contains("&")))
return true;
return false;
}
}
aqui esta o codigo para testar os endereços WWW
import java.util.Scanner;
// Classe de teste para o código enderecoWEB
public class testaWWW {
public static void main(String[] args) {
String www = "";
System.out.println("******************** Testando Endereco WEB ********************");
System.out.println(" ");
Scanner input = new Scanner(System.in);
System.out.println("Digite um endereco : ");
System.out.println(" ");
www = input.next();
System.out.println(" ");
EnderecoWEB confWeb = new EnderecoWEB(www);
/* chamada do metodo para soluçao do item e)
/* pois se a porta for padrao essa será omitida, mas caso contrario ela
/* aparecerá. */
confWeb.exibe();
System.out.println(" ");
/* chamada do metodo para solução do item d) Caso não seja digitado um recurso
/* esse será apresentado com null */
System.out.println("******************** Dados do endereco WEB ********************");
System.out.println(" ");
System.out.println("DOMINIO: " + confWeb.getDominio());
System.out.println("PORTA : " + confWeb.getPorta());
System.out.println("RECURSO: " + confWeb.getRecurso());
System.out.println(" ");
//solução para o item g)
String host = "";
Scanner entrada = new Scanner(System.in);
System.out.println("Para comparacao digite novamente o endereco: ");
System.out.println(" ");
host = entrada.next();
System.out.println(" ");
String result = "Os dominios sao : ";
boolean verifica = www.equalsIgnoreCase(host);
System.out.println(result + " " + verifica);
System.out.println(" ");
System.out.println("::::::::::::::::::::::::::Fim do teste::::::::::::::::::::::::::");
System.out.println(" ");
}
}
Desde já agradeço a atenção,
x2