Bahkan, ada banyak cara untuk menghapus komentar dalam teks HTML.
Ada beberapa karakteristik komentar pada teks HTML:
1. Jika muncul berpasangan, akan ada akhir jika dimulai.
2. Tag komentar tidak bersarang, dan tag mulai komentar (selanjutnya disebut sebagai <!-) Next harus merupakan tag akhir yang sesuai (selanjutnya disebut sebagai->).
3. Mungkin ada beberapa pasangan tag komentar dalam satu baris.
4. Komentar juga bisa rusak.
Ada kira -kira situasi berikut:
Salinan kode adalah sebagai berikut:
<Html>
<!-Ini kepala->
<head> head </head>
<!-Ini
a Div ->
<div> a Div </div>
<!-Ini
rentang-> <!-Span masuk
a Div-> <div> a Div </div>
<div> <span> rentang </span> <div>
<!-Ini adalah
span-> <div> a div </div> <!-rentang dalam div->
<div> <span> rentang </span> <div>
<Html>
Ide:
1. Baca satu baris teks sekaligus.
2. Jika garis hanya berisi <!-dan-> dan sebelum <!-. Langsung hapus konten komentar antara kedua tag dan dapatkan konten lainnya.
3. Jika garis hanya berisi <!-dan->, tapi <!-setelah->. Mendapat konten antara kedua tag, dan tag telah menemukan tag <!-.
4. Jika garis hanya berisi <!-, dapatkan konten sebelum tag, dan tag telah menemukan tag <!-
5. Jika garis hanya berisi ->, dapatkan konten di belakang tag, dan tag telah menemukan tag ->.
6. Jalankan 2, 3, 4, dan 5 langkah untuk konten yang tersisa dari garis.
7. Simpan sisanya.
8. Baca baris berikutnya.
Salin kode sebagai berikut: kelas publik htmlcommentHandler {
/**
* Detektor beranotasi dalam konten HTML
*
* @Author Boyce
* @Version 2013-12-3
*/
Private Static Class HTMLComMentDetector {
Private Static Final String Comment_Start = "<!-";
Private Static Final String Comment_end = "->";
// Apakah garis anotasi string ini dianotasi, berisi tag start komentar dan tag akhir "<!-->"
private static boolean iscommentline (string line) {
return containscommentstarttag (line) && containscommentendtag (baris)
&& line.indexof (comment_start) <line.indexof (comment_end);
}
// apakah akan memasukkan tag mulai komentar
private static boolean containscommentStartTag (string line) {
return stringutils.isnotempty (line) &&
line.indexof (Comment_Start)! = -1;
}
// apakah akan memasukkan tag akhir anotasi
private static boolean berisiCommentEndTag (string line) {
return stringutils.isnotempty (line) &&
line.indexof (Comment_end)! = -1;
}
/**
* Hapus komentar di baris ini
*/
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);
}
garis kembali;
}
// Dapatkan konten sebelum simbol komentar mulai
Private Static String getBeforecommentContent (string line) {
if (! ContainScommentStartTag (line))
garis kembali;
return line.substring (0, line.indexof (comment_start));
}
// Dapatkan konten setelah baris komentar akhir
Private Static String getAfterCommentContent (string line) {
if (! ContainScommentendTag (line))
garis kembali;
return line.substring (line.indexof (comment_end) + comment_end.length ());
}
}
/**
* Baca konten HTML dan hapus komentar
*/
String statis publik readHtmlContentWithOutComment (BufferedReader Reader) melempar ioException {
StringBuilder builder = new StringBuilder ();
Garis string = null;
// adalah baris saat ini dalam komentar
Boolean Incomment = false;
while (objectutils.isnotnull (line = reader.readline ())) {
// Jika tag komentar disertakan
while (htmlcommentDetector.containscommentStartTag (line) ||
HtmlcommentDetector.containscommentendtag (line)) {
// Hapus konten di antara tag komentar yang muncul berpasangan
// <!-Komentar->
if (htmlcommentDetector.isCommentline (line)) {
line = htmlcommentDetector.deletecommentInline (line);
}
// Jika itu bukan baris komentar, tetapi label awal dan label akhir masih ada, label akhir harus sebelum label start
// xxx-> konten <!-
lain if (htmlcommentDetector.containscommentStartTag (line) && htmlCommentDetector.containscommentEndtag (line)) {
// Setelah mendapatkan tag akhir, teks sebelum tag start diatur dan mengatur pembinaan ke true
line = htmlcommentDetector.getAfterCommentContent (line);
line = htmlcommentDetector.getBeforeCommentContent (line);
Incomment = true;
}
// Jika saja ada tag start, karena tag komentar tidak mendukung bersarang, baris dengan hanya tag start pasti tidak akan ada
// konten <!-
lain if (! Incomment && htmlcommentDetector.containscommentStartTag (line)) {
// Atur Incomment ke True. Dapatkan konten sebelum tag mulai
Incomment = true;
line = htmlcommentDetector.getBeforeCommentContent (line);
}
// Jika saja ada tag akhir, karena tag komentar tidak mendukung bersarang, hanya garis tag akhir yang harus terjadi
// -> konten
lain jika (incomment && htmlcommentDetector.containscommentEndtag (line)) {
// Atur Incomment ke False. Dapatkan konten setelah tag akhir
Incomment = false;
line = htmlcommentDetector.getAfterCommentContent (line);
}
// Simpan konten yang tidak terommentasi dari baris ini
if (stringutils.isnotempty (baris))
builder.append (line);
}
// Simpan baris tanpa tag komentar di komentar = false
if (stringutils.isnotempty (line) &&! Incomment)
builder.append (line);
}
return builder.tostring ();
}
}
Tentu saja, ada banyak metode lain, yang juga dapat dihapus melalui pencocokan reguler, atau Anda dapat memulai dan mengakhiri dengan tag stack.
Tunggu, kode di atas telah diuji dan digunakan, dan saya harap ini akan berguna bagi siswa yang membutuhkan.