De hecho, hay muchas formas de eliminar los comentarios en el texto HTML.
Hay varias características de los comentarios sobre el texto HTML:
1. Si aparece en pares, habrá un final si se inicia.
2. La etiqueta de comentarios no está anidada, y la etiqueta de inicio de comentarios (en lo sucesivo se conoce como <!-) La siguiente debe ser su etiqueta final correspondiente (en lo sucesivo denominado->).
3. Puede haber múltiples pares de etiquetas de comentarios en una línea.
4. Los comentarios también se pueden romper.
Hay aproximadamente las siguientes situaciones:
La copia del código es la siguiente:
<html>
<!-Esta es una cabeza->
<BEAD> una cabeza </thead>
<!-esto es
un div ->
<div> un div </div>
<!-esto es
un tramo-> <!-Span en
un div-> <div> un div </div>
<div> <span> un span </span> <div>
<!-esto es un
Span-> <Viv> a div </div> <!-span en un div->
<div> <span> un span </span> <div>
<html>
Ideas:
1. Lea una línea de texto a la vez.
2. Si la línea contiene solo <!-y-> y antes <!-. Elimine directamente el contenido de comentarios entre las dos etiquetas y obtenga otro contenido.
3. Si la línea contiene solo <!-y->, pero <!-After->. Obtiene el contenido entre las dos etiquetas, y la etiqueta ha encontrado la etiqueta <!-.
4. Si la línea contiene solo <!-, obtenga el contenido antes de la etiqueta, y la etiqueta ha encontrado la etiqueta <!-.
5. Si la línea solo contiene ->, obtenga el contenido detrás de la etiqueta y la etiqueta se ha encontrado con la etiqueta ->.
6. Ejecute 2, 3, 4 y 5 pasos para el contenido restante de la línea.
7. Guarde el resto.
8. Lea la siguiente línea.
Copie el código de la siguiente manera: public class htmlcommentHandler {
/**
* Detector anotado en contenido HTML
*
* @author boyce
* @version 2013-12-3
*/
clase estática privada htmlcommentDetector {
Private static final String comment_start = "<!-";
Private static final String comment_end = "->";
// ¿Es esta línea de anotación de cadena anotada, contiene la etiqueta de inicio del comentario y la etiqueta final "<!-->"
ISCOMMENTLINE BOOLEO ESTÁTICO PRIVADO (línea de cadena) {
Return ContansCommentStarttag (línea) && ContinsCommentEdtag (línea)
&& line.indexof (comment_start) <line.indexof (comment_end);
}
// si incluir la etiqueta de inicio del comentario
Private static boolean contieneCommentStartTag (línea de cadena) {
return stringUtils.isnotempty (línea) &&
line.indexof (comment_start)! = -1;
}
// si incluir una etiqueta de finalización de anotación
booleano estático privado contenscommentEdtag (línea de cadena) {
return stringUtils.isnotempty (línea) &&
line.indexof (comment_end)! = -1;
}
/**
* Eliminar los comentarios en esta línea
*/
string static static privado deletecommentInline (línea de cadena) {
while (istcommentline (line)) {
int inicio = line.indexof (comment_start) + comment_start.length ();
int end = line.IndexOf (comment_end);
line = line.substring (inicio, final);
}
línea de regreso;
}
// Obtenga el contenido antes del símbolo de comentario inicial
cadena estática privada getBeforCommentContent (línea de cadena) {
if (! ContinsCommentStarttag (línea))
línea de regreso;
return line.substring (0, line.indexof (comment_start));
}
// Obtener el contenido después de la línea de comentarios finales
String estático privado getaFterCommentContent (línea de cadena) {
if (! ContinsCommentEdtag (línea))
línea de regreso;
return line.substring (line.indexof (comment_end) + comment_end.length ());
}
}
/**
* Lea el contenido HTML y elimine los comentarios
*/
public Static String ReadhtmlContentwithoutComment (BufferedReader Reader) lanza IoException {
StringBuilder Builder = new StringBuilder ();
Línea de cadena = nulo;
// es la línea actual en el comentario
incommento booleano = falso;
while (objectUtils.isnotNull (line = lector.readline ())) {
// Si la etiqueta de comentarios está incluida
while (htmlcommentDetector.ContainsCommentStarttag (línea) ||
HtmlcommentDetector.containscommentEdtag (línea)) {
// Eliminar el contenido entre las etiquetas de comentarios que aparecen en pares
// <!-Comentario->
if (htmlcommentDetector.iscommentLine (línea)) {
línea = htmlcommentDetector.deletecommentInline (línea);
}
// Si no es una línea de comentarios, pero la etiqueta de inicio y la etiqueta final aún existen, la etiqueta final debe ser antes de la etiqueta de inicio
// xxx-> contenido <!-
else if (htmlcommentDetector.containsCommentStartTag (línea) && htmlcommentDetector.containscommentEdtag (línea)) {
// Después de obtener la etiqueta final, el texto antes de la etiqueta de inicio se establece y establece el ingreso en verdadero
línea = htmlcommentDetector.getAfterCommentContent (línea);
línea = htmlcommentDetector.getBeForecomMentContent (línea);
incommento = verdadero;
}
// Si solo existe la etiqueta de inicio, porque la etiqueta de comentarios no es compatible
// Contenido <!-
else if (! incomment && htmlcommentDetector.containscommentStarttag (línea)) {
// Establecer el incommento en verdadero. Obtenga contenido antes de la etiqueta de inicio
incommento = verdadero;
línea = htmlcommentDetector.getBeForecomMentContent (línea);
}
// Si solo existe la etiqueta final, porque la etiqueta de comentarios no es compatible
// -> contenido
else if (incomment && htmlcommentDetector.containscommentEdtag (línea)) {
// Establecer el incommento en falso. Obtenga el contenido después de la etiqueta final
incommento = falso;
línea = htmlcommentDetector.getAfterCommentContent (línea);
}
// Guardar el contenido no commentado de esta línea
if (stringUtils.isnotempty (línea))
builder.append (línea);
}
// Guardar la línea sin etiquetas de comentarios en comentario = falso
if (stringUtils.isnotempty (línea) &&! Incomment)
builder.append (línea);
}
return builder.ToString ();
}
}
Por supuesto, hay muchos otros métodos, que también se pueden eliminar a través de la coincidencia regular, o puede comenzar y terminar con la etiqueta de pila.
Espera, el código anterior ha sido probado y utilizado, y espero que sea útil para los estudiantes necesitados.