Boa tarde pessoal!!!
Tenho uma avaliação do curso de JAVA para entregar mas estou completamente perdida!
Alguém me pode ajudar???
O pedido é :
Escreva um programa em Java que leia um ficheiro em HTML e determine se o seu conteúdo é válido ou se
contêm erros.
O HTML, ou HyperText Markup Language, é a linguagem em que as páginas Web são escritas. Numa página
pode existir texto misturado com tags ou marcas. As tags aparecem usualmente aos pares e entre <>.
Página 2 | 3
As tags devem estar devidamente encadeadas, como no exemplo.
Deve produzir a listagem dos erros encontrados ou uma mensagem a dizer que o ficheiro é válido, no caso
contrário.
eu acho que eu ja fiz uma coisa assim, mas ja tem quase 20 anos. Nem lembro mais. O que voce pode fazer eh abrir o arquivo com os metodos padroes de leitura de arquivo, e a cada linha pega a tag que abre ela <> e verifica se ela em fechamento </>
acredito que voce tenha que fazer manual. mas tem blibliotecas que fazem essa verificacao.
importjava.io.*;importjavax.swing.JOptionPane;publicclassLeArq{publicstaticvoidmain(String[]args){try{Stringnome;nome=JOptionPane.showInputDialog(null,"Entre com o nome do arquivo");BufferedReaderbr=newBufferedReader(newFileReader(nome));while(br.ready()){Stringlinha=br.readLine();System.out.println(linha);`Textopré-formatado`
S
Sonia_Santos
Já comecei o programa mas está difícil de o fazer ler e analisar.
Abrir o ficheiro HTML está ok. Mas o resto alguém pode ajudar???
@Sonia_Santos nesse tipo de situação é muito complicado alguém te ajudar, porque seria necessário alguém criar todo o programa para você. E isso é um projeto, então demanda um pouco de tempo e planejamento, o máximo que alguém pode fazer é sugerir dicas de como fazer, como o Thimor fez! Seria mais fácil se tivesse algo pronto, mas com erro específicos para alguém te ajudar!
Contudo, fiz esse exemplo para você. Partindo da ideia de comparar as tags de abertura (<>) e fechamento ( </>). Talvez tenha dificuldades para entender. O que você deve saber antes:
Você terá que adaptar para o seu projeto ou usar como base;
Para testes eu usei um método de leitura diferente do que você apresentou;
Eu usei regex, e os métodos pattern e matcher, se não conhece dá uma pesquisada;
Esse exemplo aborda três tipos de erros e não fiz muitos testes.
importjava.util.Scanner;importjava.util.ArrayList;importjava.util.Stack;importjava.util.regex.Pattern;importjava.util.regex.Matcher;classMain{privatestaticStringERRO_01="Tag %s vazia, linha %d!";privatestaticStringERRO_02="Tag %s fechada mas não aberta, linha %d!";privatestaticStringERRO_03="Tags %s e %s diferentes, linha %d!";privateArrayList<String>listaErros;privateStack<String>pilhaTags;publicvoidverificar(Stringhtml){listaErros=newArrayList<>();pilhaTags=newStack<>();Scannerscan=newScanner(html);intindex=0;while(scan.hasNext()){index++;Stringlinha=scan.nextLine();verificarHtml(linha,index);}if(listaErros.isEmpty()&&pilhaTags.isEmpty()){System.out.println("Html Válido");}//Mostra todos os errosfor(Strings:listaErros){System.out.println(s);}//Tags não fechadas!if(!pilhaTags.isEmpty()){System.out.println("ALERTA: algumas tags não foram fechadas");}scan.close();}privatevoidverificarHtml(Stringlinha,intindex){Patternpattern=Pattern.compile("(</?)(\\w*)>");Matchermatcher=pattern.matcher(linha);while(matcher.find()){StringtagInicio=matcher.group(1);StringtagNome=matcher.group(2);//verifica tags vazias "<> ou </>"if(tagNome.isEmpty()){listaErros.add(String.format(ERRO_01,tagCompleta,index));continue;}//add tag de abertura a pilhaif(tagInicio.equals("<")){pilhaTags.push(tagNome);}//Comparar comparar tags de fechamento e aberturaelse{verificarTags(tagNome,index);}}}privatevoidverificarTags(StringtagEndNome,intindex){if(pilhaTags.isEmpty()){Stringmsg=String.format(ERRO_02,"</"+tagEndNome+">",index);listaErros.add(msg);return;}StringtagStartNome=pilhaTags.pop();//Se as tags forem diferentesif(!tagStartNome.equals(tagEndNome)){StringtagStart="<"+tagStartNome+">";StringtagEnd="</"+tagEndNome+">";listaErros.add(String.format(ERRO_03,tagStart,tagEnd,index));}}publicstaticvoidmain(String[]args){Stringhtml1="<P>Isto é um parágrafo <BOLD>com uma parte a negrito.</BOLD></P>";Stringhtml2="<p>Teste</b> \n <h1>teste2 teste2</h3>";Stringhtml3="<p>test3<>\n<p><b>teste3</b></p>";Mainmain=newMain();System.out.println("Html1:");main.verificar(html1);System.out.println();System.out.println("Html2:");main.verificar(html2);System.out.println();System.out.println("HTML3:");main.verificar(html3);}}
@Sonia_Santos
Boa tarde, quase não tive tempo esses dias para entrar aqui na GUJ, vi que o pessoal já apresentou um bom modelo desenvolvido para realizar a tarefa que você mencionou, mas se precisar de tirar alguma dúvida, avisa aí que te dou uma força também!