亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java 批量刪除html中注釋內容的方法

2019-11-26 15:34:08
字體:
來源:轉載
供稿:網友

其實刪除html文本中的注釋有很多方法,這里就自己隨便寫了一個處理方法,權當筆記,有需要的同學可以參考。

html文本的注釋有幾個特點:
1. 成對出現,有開始就一定有結束。
2. 注釋標簽沒有嵌套,注釋開始標簽(以下稱為 <!--)下一個一定是其對應的結束標簽(以下稱為 -->)。
3. 一行中可能有多個注釋標簽對兒。
4. 注釋也可以換行。
大致有以下幾種情況:

復制代碼 代碼如下:

<html> 
<!--This is a head--> 
<head>A Head</head> 
<!--This is  
   a div --> 
<div>A Div</div> 
<!--This is  
    a span--><!--span in  
    a div--><div>a div</div> 
<div><span>A span</span><div> 

<!--This is a  
        span--><div>A div</div><!--span in a div--> 
<div><span>A span</span><div> 
<html> 

思路:
1. 每次讀取一行文本。
2. 如果該行中只包含<!-- 與 -->,并且<!-- 在 --> 之前。直接刪除兩標簽之間的注釋內容,獲取其他內容。
3. 如果該行中只包含<!-- 與 -->,但是<!-- 在 --> 之后。獲取兩個標簽之間的內容,并且標注已遇到<!--標簽。
4. 如果該行中只包含<!--,獲取標簽前面的內容,并且標注已遇到<!--標簽。
5. 如果該行中只包含-->,獲取標簽后面的內容,并且標注已遇到 --> 標簽。
6. 對該行剩下的內容再執行2,3,4,5步驟。
7. 保存剩下的內容。
8. 讀取下一行。

復制代碼 代碼如下:
    public class HtmlCommentHandler {
        /**
         * html內容中注釋的Detector
         *
         * @author boyce
         * @version 2013-12-3
         */
        private static class HtmlCommentDetector {

            private static final String COMMENT_START = "<!--";
            private static final String COMMENT_END = "-->";

            // 該字符串是否是html注釋行,包含注釋的開始標簽且結束標簽"<!-- -->"
            private static boolean isCommentLine(String line) {

                return containsCommentStartTag(line) && containsCommentEndTag(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);
                }
                return line;
            }

            // 獲取開始注釋符號之前的內容
            private static String getBeforeCommentContent(String line) {
                if (!containsCommentStartTag(line))
                    return line;

                return line.substring(0, line.indexOf(COMMENT_START));
            }

            // 獲取結束注釋行之后的內容
            private static String getAfterCommentContent(String line) {
                if (!containsCommentEndTag(line))
                    return line;

                return line.substring(line.indexOf(COMMENT_END) + COMMENT_END.length());
            }
        }

        /**
         * 讀取html內容,去掉注釋
         */
        public static String readHtmlContentWithoutComment(BufferedReader reader) throws IOException {
            StringBuilder builder = new StringBuilder();
            String line = null;

            // 當前行是否在注釋中
            boolean inComment = false;
            while (ObjectUtils.isNotNull(line = reader.readLine())) {

                // 如果包含注釋標簽
                while (HtmlCommentDetector.containsCommentStartTag(line) ||
                        HtmlCommentDetector.containsCommentEndTag(line)) {

                    // 將成對出現的注釋標簽之間的內容刪除
                    // <!-- comment -->
                    if (HtmlCommentDetector.isCommentLine(line)) {
                        line = HtmlCommentDetector.deleteCommentInLine(line);
                    }

                    // 如果不是注釋行,但是依然存在開始標簽和結束標簽,結束標簽一定在開始標簽之前
                    // xxx -->content<!--
                    else if (HtmlCommentDetector.containsCommentStartTag(line) && HtmlCommentDetector.containsCommentEndTag(line)) {
                        // 獲取結束標簽之后,開始標簽之前的文本,并且將 inComment設置為true
                        line = HtmlCommentDetector.getAfterCommentContent(line);
                        line = HtmlCommentDetector.getBeforeCommentContent(line);
                        inComment = true;
                    }

                    // 如果只存在開始標簽,因為注釋標簽不支持嵌套,只有開始標簽的行一定不會inComment
                    // content <!--
                    else if (!inComment && HtmlCommentDetector.containsCommentStartTag(line)) {
                        // 將 inComment 設置為true。獲取開始標簽之前的內容
                        inComment = true;
                        line = HtmlCommentDetector.getBeforeCommentContent(line);
                    }

                    // 如果只存在結束標簽,因為注釋標簽不支持嵌套,只有結束標簽的行一定inComment
                    // -->content
                    else if (inComment && HtmlCommentDetector.containsCommentEndTag(line)) {
                        // 將 inComment 設置為false。獲取結束標簽之后的內容
                        inComment = false;
                        line = HtmlCommentDetector.getAfterCommentContent(line);
                    }

                    // 保存該行非注釋的內容
                    if (StringUtils.isNotEmpty(line))
                        builder.append(line);
                }

                // 保存該行不存在任何注釋標簽的并且inComment = false的行
                if (StringUtils.isNotEmpty(line) && !inComment)
                    builder.append(line);
            }
            return builder.toString();
        }
    }

當然,還有其他很多的方法,也可以通過正則匹配刪除,也可以通過Stack標記開始結束。
等等,以上代碼經過測試使用,希望對有需要的同學有用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国自产精品中文字幕亚洲| 欧美日韩国产成人在线观看| 美女扒开尿口让男人操亚洲视频网站| 日本亚洲欧洲色α| 亚洲91精品在线| 美女国内精品自产拍在线播放| 国产午夜精品全部视频播放| 91精品国产91久久久久福利| 日本精品视频在线播放| yw.139尤物在线精品视频| 精品丝袜一区二区三区| 亚洲成年网站在线观看| 久久久噜噜噜久久中文字免| 亚洲美女在线观看| 最近中文字幕2019免费| 日韩高清免费观看| 国产盗摄xxxx视频xxx69| 久久久亚洲网站| 亚洲a在线播放| 国产精品嫩草视频| 日韩不卡在线观看| 欧美在线激情视频| 亚洲精品av在线播放| 亚洲女人初尝黑人巨大| 欧美夫妻性生活xx| 国产精品高清免费在线观看| 亚洲精品国产精品久久清纯直播| 91精品国产综合久久久久久蜜臀| 国产一区二区三区日韩欧美| 97在线视频免费播放| 午夜精品福利视频| 国产成人在线一区| 亚洲人av在线影院| 97超级碰在线看视频免费在线看| 久久精品视频导航| 亚洲乱码国产乱码精品精| 精品国产成人av| 中文字幕亚洲欧美| 欧美日韩亚洲一区二区| 欧美在线一区二区视频| 欧美性猛交xxxx黑人| 亚洲天堂网在线观看| 亚洲**2019国产| 日本一区二三区好的精华液| 在线观看日韩www视频免费| 欧美午夜美女看片| 2020国产精品视频| 欧美高清videos高潮hd| 国产一区二区欧美日韩| 亚洲欧洲日产国产网站| 91av在线播放| 久久精品中文字幕电影| 国产免费观看久久黄| 国产亚洲成av人片在线观看桃| 欧美在线亚洲一区| 一区二区三区日韩在线| 欧美国产日韩在线| 一区国产精品视频| 国产精品直播网红| 青青草国产精品一区二区| 中文字幕日韩在线视频| 午夜精品三级视频福利| 日韩电影免费观看中文字幕| 亚洲天堂av女优| 精品小视频在线| 色婷婷综合久久久久中文字幕1| 国产精品视频白浆免费视频| 亚洲综合大片69999| 97视频在线观看成人| 久久久久久久香蕉网| 日韩精品免费一线在线观看| 亚洲色图17p| 怡红院精品视频| 亚洲成人动漫在线播放| 北条麻妃一区二区三区中文字幕| 亚洲一区二区三| 国产一区二区三区18| 国产99视频在线观看| 亚洲精品一区在线观看香蕉| 久久久精品国产| 国产精品一区二区三区久久| 丝袜美腿亚洲一区二区| 久久久在线视频| 亚洲综合在线播放| 欧美黑人极品猛少妇色xxxxx| 亚洲aa在线观看| 91精品国产色综合久久不卡98口| 这里只有精品视频| 国产精品福利小视频| 欧美日韩福利视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲午夜未满十八勿入免费观看全集| 91成品人片a无限观看| 亚洲欧美日韩中文在线| 日韩美女视频免费看| 中文字幕一区二区精品| 欧美俄罗斯乱妇| 亚洲欧美激情视频| 亚洲精品国精品久久99热| 色狠狠久久aa北条麻妃| 欧美日韩国产在线播放| 在线视频欧美日韩| 97人人爽人人喊人人模波多| 日韩精品中文字| 精品人伦一区二区三区蜜桃网站| 国产精品video| 日韩av在线资源| 国产精品久久久久久久一区探花| 久久久国产精品亚洲一区| 萌白酱国产一区二区| 欧洲成人在线视频| 中文字幕无线精品亚洲乱码一区| 国产精品99久久久久久久久| 在线看片第一页欧美| 国产精品精品久久久久久| 久久精品视频播放| 777午夜精品福利在线观看| 亚洲自拍在线观看| 日韩专区在线观看| 亚洲在线观看视频| 久久精品视频免费播放| 国产精品99蜜臀久久不卡二区| 亚洲www在线| 久久人人看视频| 高清欧美性猛交xxxx黑人猛交| 精品久久久久国产| 国产视频精品自拍| 日韩av在线免费| 亚洲欧洲黄色网| 91av视频导航| 97在线观看免费| 亚洲女性裸体视频| 亚洲国产精品久久久久秋霞蜜臀| 欧美精品一本久久男人的天堂| 91在线视频导航| 国产精品久久久久久久9999| 亚洲女人被黑人巨大进入al| 国产成人av网址| 中文字幕在线精品| 亚洲欧美日韩视频一区| 日韩最新中文字幕电影免费看| 精品久久久精品| 色综合91久久精品中文字幕| 欧美日韩中文在线| 欧美高清理论片| 97久久国产精品| 色综合天天狠天天透天天伊人| 国产免费一区视频观看免费| 久久99久久久久久久噜噜| 久操成人在线视频| 日本在线精品视频| 欧美精品国产精品日韩精品| 亚洲护士老师的毛茸茸最新章节| 欧美激情中文字幕在线| 成人观看高清在线观看免费| 亚洲精品自拍视频| 欧美黄网免费在线观看| 亲爱的老师9免费观看全集电视剧| 在线亚洲国产精品网| 在线免费观看羞羞视频一区二区| 国产日韩换脸av一区在线观看| 日本最新高清不卡中文字幕| 久久资源免费视频| 精品国产一区二区三区久久狼5月|