栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 批量删除html中注释内容的方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 批量删除html中注释内容的方法

其实删除html文本中的注释有很多方法,这里就自己随便写了一个处理方法,权当笔记,有需要的同学可以参考。

html文本的注释有几个特点:
1. 成对出现,有开始就一定有结束。
2. 注释标签没有嵌套,注释开始标签(以下称为 )。
3. 一行中可能有多个注释标签对儿。
4. 注释也可以换行。
大致有以下几种情况:
复制代码 代码如下:
 
 
A Head 
 
A Div 
a div 
A span 

A div 
A span 
 

思路:
1. 每次读取一行文本。
2. 如果该行中只包含,并且 之前。直接删除两标签之间的注释内容,获取其他内容。
3. 如果该行中只包含,但是 之后。获取两个标签之间的内容,并且标注已遇到,获取标签后面的内容,并且标注已遇到 --> 标签。
6. 对该行剩下的内容再执行2,3,4,5步骤。
7. 保存剩下的内容。
8. 读取下一行。
复制代码 代码如下:    public class HtmlCommentHandler {
       
        private static class HtmlCommentDetector {

            private static final String COMMENT_START = "";

            // 该字符串是否是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());
            }
        }

       
        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)) {

                    // 将成对出现的注释标签之间的内容删除
                    //
                    if (HtmlCommentDetector.isCommentLine(line)) {
                        line = HtmlCommentDetector.deleteCommentInLine(line);
                    }

                    // 如果不是注释行,但是依然存在开始标签和结束标签,结束标签一定在开始标签之前
                    // xxx -->contentcontent
                    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标记开始结束。
等等,以上代码经过测试使用,希望对有需要的同学有用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/152292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号