На самом деле, есть много способов удаления комментариев в тексте HTML.
Есть несколько характеристик комментариев по тексту HTML:
1. Если он появляется парами, будет конец, если он начнется.
2. Тег комментариев не вложен, и тег начала комментариев (далее именуемый <!-) Next должен быть его соответствующим конечным тегом (далее именуемый->).
3. Может быть несколько пар тегов комментариев в строке.
4. Комментарии также могут быть сломаны.
Есть примерно следующие ситуации:
Кода -копия выглядит следующим образом:
<html>
<!-это голова->
<Head> голова </head>
<!-это
Div ->
<div> div </div>
<!-это
Пролет-> <!-Span In
Div-> <div> div </div>
<div> <pan> Span </span> <div>
<!-Это
Span-> <div> div </div> <!-Span в Div->
<div> <pan> Span </span> <div>
<html>
Идеи:
1. Прочитайте одну строку текста за раз.
2. Если строка содержит только <!-и-> и до <!-. Прямо удалите контент комментариев между двумя тегами и получите другой контент.
3. Если линия содержит только <!-и->, но <!-после->. Получает контент между двумя тегами, и тег столкнулся с тегом <!-.
4. Если строка содержит только <!-, получите контент перед тегом, и тег столкнулся с тегом <!-.
5. Если строка содержит только ->, получите контент за тегом, и тег столкнулся с тегом ->.
6. Выполните 2, 3, 4 и 5 шагов для оставшегося содержания линии.
7. Сохраните все остальное.
8. Прочитайте следующую строку.
Скопируйте код следующим образом: Public Class HtmlCommentHandler {
/**
* Детектор аннотирован в контенте HTML
*
* @author Boyce
* @version 2013-12-3
*/
Частный статический класс htmlcommentdetector {
частная статическая конечная строка Comment_start = "<!-";
Приватная статическая конечная строка Comment_end = "->";
// Это аннотация этой строки аннотации, содержит тег начала комментария и конечный тег "<!-->"
Private Static Boolean Iscommentline (String Line) {
return ContainsCommentStartTag (Line) && содержит CommentEndTag (Line)
&& line.indexof (comment_start) <line.indexof (comment_end);
}
// следует ли включить тег начала комментария
Private Static Boolean ContainsCommentStartTag (String Line) {
return stringutils.isnotempty (line) &&
line.indexof (comment_start)! = -1;
}
// следует ли включать в себя метку аннотации
Private Static Boolean ContainsCommentEndTag (String Line) {
return stringutils.isnotempty (line) &&
line.indexof (comment_end)! = -1;
}
/**
* Удалить комментарии в этой строке
*/
Private Static String DeleteCommentInline (String Line) {
while (iscommentline (line)) {
int start = line.indexof (comment_start) + comment_start.length ();
int end = line.indexof (comment_end);
line = line.substring (Start, End);
}
возвращаемая линия;
}
// Получить контент до символа начального комментария
Частная статическая строка getBeForeCommentContent (String Line) {
if (! Содержит commentStarttag (Line))
возвращаемая линия;
return line.substring (0, line.indexof (comment_start));
}
// Получить контент после строки конечных комментариев
частная статическая строка getaftercommentcontent (строка строки) {
if (! Содержит Комментария
возвращаемая линия;
return line.substring (line.indexof (comment_end) + comment_end.length ());
}
}
/**
* Прочтите контент HTML и удалите комментарии
*/
public Static String readhtmlcontentWithOutComment (BufferedReadER Reader) бросает ioException {
StringBuilder Builder = new StringBuilder ();
String line = null;
// текущая строка в комментарии
логический доход = false;
while (objectutils.isnotnull (line = reader.readline ())) {
// Если тег комментария включен
while (htmlcommentdetector.containscommentStarttag (Line) ||
Htmlcommentdetector.containscommentendtag (line)) {
// Удалить контент между тегами комментариев, которые появляются пара
// <!-Комментарий->
if (htmlcommentdetector.iscommentline (line)) {
line = htmlCommentDetector.DeleteCommentInline (Line);
}
// Если это не строка комментариев, но метка начала и метка конечной метки все еще существует, метка конечного
// xxx-> content <!-
else if (htmlcommentdetector.containscommentStarttag (line) && htmlcommentdetector.containscommentendtag (line)) {
// после получения конечного тега текст перед установкой тег начала установлен и установите доход на True
line = htmlcommentDetector.getafterCommentContent (Line);
line = htmlCommentDetector.getBeForeCommentContent (Line);
ocomment = true;
}
// Если существует только начальный тег, потому что тег комментариев не поддерживает гнездование, строки только с начальным тегом определенно не будут
// Контент <!-
else if (! uncomment && htmlcommentdetector.containscommentStarttag (line)) {
// Установить доход в True. Получите контент до начала тега
ocomment = true;
line = htmlCommentDetector.getBeForeCommentContent (Line);
}
// Если существует только конечный тег, потому что тег комментариев не поддерживает гнездование, должны быть только конечные линии тегов
// -> Контент
else if (scomment && htmlcommentdetector.containscommentendtag (line)) {
// Установить доход в False. Получите контент после конечного тега
доход = false;
line = htmlcommentDetector.getafterCommentContent (Line);
}
// Сохранить некомментированное содержание этой линии
if (stringutils.isnotempty (line))
Builder.Append (Line);
}
// Сохранить строку без тегов комментариев в комментарии = false
if (stringutils.isnotempty (line) &&!
Builder.Append (Line);
}
return Builder.toString ();
}
}
Конечно, есть много других методов, которые также могут быть удалены с помощью регулярного соответствия, или вы можете начать и заканчивать с тегом стека.
Подождите, приведенный выше код был протестирован и использован, и я надеюсь, что он будет полезен нуждающимся студентам.