En fait, il existe de nombreuses façons de supprimer les commentaires dans le texte HTML.
Il existe plusieurs caractéristiques des commentaires sur le texte HTML:
1. S'il apparaît par paires, il y aura une fin si cela commence.
2. La balise de commentaire n'est pas imbriquée, et la balise de démarrage de commentaire (ci-après dénommée <! -) Ensuite doit être sa balise de fin correspondante (ci-après dénommée ->).
3. Il peut y avoir plusieurs paires de balises de commentaire dans une ligne.
4. Les commentaires peuvent également être brisés.
Il existe à peu près les situations suivantes:
La copie de code est la suivante:
<html>
<! - C'est une tête ->
<Aad> une tête </-head>
<! - c'est
un div ->
<div> a div </div>
<! - c'est
une durée -> <! - Span dans
un div -> <div> a div </div>
<div> <span> a Span </span> <div>
<! - c'est un
Span -> <div> a div </div> <! - Span dans un div ->
<div> <span> a Span </span> <div>
<html>
Idées:
1. Lisez une ligne de texte à la fois.
2. Si la ligne ne contient que <! - et -> et avant <! -. Supprimez directement le contenu du commentaire entre les deux balises et obtenez un autre contenu.
3. Si la ligne ne contient que <! - et ->, mais <! - After ->. Obtient le contenu entre les deux balises, et la balise a rencontré la balise <! -.
4. Si la ligne ne contient que <! -, obtenez le contenu avant la balise et que la balise a rencontré la balise <! -.
5. Si la ligne contient uniquement ->, obtenez le contenu derrière la balise et que la balise a rencontré la balise ->.
6. Exécuter 2, 3, 4 et 5 étapes pour le contenu restant de la ligne.
7. Enregistrer le reste.
8. Lisez la ligne suivante.
Copiez le code comme suit: classe publique htmlcommenthandler {
/ **
* Détecteur Annoté dans le contenu HTML
*
* @author boyce
* @version 2013-12-3
* /
classe statique privée htmlcommentdetector {
chaîne finale statique privée comment_start = "<! -";
chaîne finale statique privée comment_end = "->";
// Cette ligne d'annotation de chaîne est-elle annotée, contient la balise de démarrage du commentaire et la balise de fin "<! - ->"
Boolean statique privé IscommentLine (ligne de chaîne) {
return contientcommentStartTag (line) && contientcommentEndTag (ligne)
&& line.indexof (comment_start) <line.indexof (comment_end);
}
// s'il faut inclure la balise de démarrage du commentaire
Boolean statique privé contientcommentStarttag (ligne de chaîne) {
return stringUtils.isnotempty (line) &&
line.indexof (comment_start)! = -1;
}
// s'il faut inclure une balise de fin d'annotation
Boolean statique privé contientcommentEndTag (ligne de chaîne) {
return stringUtils.isnotempty (line) &&
line.indexof (comment_end)! = -1;
}
/ **
* Supprimer les commentaires dans cette ligne
* /
String statique privé DeleteCommentInline (ligne de chaîne) {
while (isCommentLine (line)) {
int start = line.indexof (comment_start) + comment_start.length ();
int end = line.indexof (comment_end);
line = line.substring (start, end);
}
ligne de retour;
}
// Obtenez le contenu avant le symbole de commentaire de départ
String statique privé GetBeForCommentContent (ligne de chaîne) {
if (! contientcommentStartTag (ligne))
ligne de retour;
return line.substring (0, line.indexof (comment_start));
}
// Obtenez le contenu après la ligne de commentaire de fin
chaîne statique privée getAfterCommentContent (ligne de chaîne) {
if (! contientcommentendtag (ligne))
ligne de retour;
return line.substring (line.indexof (comment_end) + comment_end.length ());
}
}
/ **
* Lisez le contenu HTML et supprimez les commentaires
* /
La chaîne statique publique ReadhtmlContent WithoutComment (lecteur de tampon deader) lève ioException {
StringBuilder Builder = new StringBuilder ();
Chaîne line = null;
// est la ligne actuelle du commentaire
Boolean recouvrement = false;
while (objectUtils.isnotnull (line = reader.readline ())) {
// Si la balise de commentaire est incluse
while (htmlcommentdetector.ContainsCommentStartTag (ligne) ||
Htmlcommentdetect
// Supprimer le contenu entre les balises de commentaire qui apparaissent par paires
// <! - Commentaire ->
if (htmlcommentdetector.iscommentline (ligne)) {
line = htmlcommentdetector.DeleTecommentInline (ligne);
}
// Si ce n'est pas une ligne de commentaire, mais l'étiquette de départ et l'étiquette de fin existent toujours, l'étiquette finale doit être avant l'étiquette de départ
// xxx -> Contenu <! -
else if (htmlcommentdetector.containscommentStartTag (line) && htmlcommentdetector.containscommentEndTag (line)) {
// Après avoir obtenu la balise fin
line = htmlcommentdetector.getAfterCommentContent (ligne);
line = htmlcommentdetector.getBeForCommentContent (ligne);
remise = vrai;
}
// Si seulement la balise de démarrage existe, car la balise de commentaire ne prend pas en charge la nidification, les lignes avec uniquement la balise de démarrage ne seront certainement pas
// Content <! -
else if (! Incomment && htmlcommentdetector.containscommentStarttag (line)) {
// définit le revenu sur true. Obtenez du contenu avant la balise de démarrage
remise = vrai;
line = htmlcommentdetector.getBeForCommentContent (ligne);
}
// Si seulement la balise finale existe, car la balise de commentaire ne prend pas en charge la nidification, seuls les slogans finaux doivent être le revenu
// -> Contenu
else if (incomment && htmlcommentdetector.containscommentEndTag (line)) {
// Définissez le revenu sur FALSE. Obtenez le contenu après la balise de fin
remise = false;
line = htmlcommentdetector.getAfterCommentContent (ligne);
}
// Enregistrer le contenu non commenté de cette ligne
if (stringUtils.isnotempty (ligne))
builder.append (ligne);
}
// Enregistrez la ligne sans étiquettes de commentaire dans commentaire = false
if (stringUtils.isnotempty (line) &&!
builder.append (ligne);
}
retour builder.toString ();
}
}
Bien sûr, il existe de nombreuses autres méthodes, qui peuvent également être supprimées grâce à une correspondance régulière, ou vous pouvez commencer et vous terminer par la balise de pile.
Attendez, le code ci-dessus a été testé et utilisé, et j'espère qu'il sera utile aux étudiants dans le besoin.