zoukankan      html  css  js  c++  java
  • 博客项目实现文章摘要

    前提:

           1.博客首先系统自然是基于文本编辑器的,例如本博客是采用fckeditor。而文本编辑器提交时的文本是HTML格式的,将这个HTML格式文本直接以页面一部分显示,便可以实现文章的格式。

           2.文章摘要是,截取文章中前面一小部分,用于显示在首页文章列表。点击文章链接,才可以看到文章全部。

           3.博客系统,数据库里存储的是文章路径,而文章内容是存储在服务器本地目录下。根据1可知,文章内容是HTML格式的。

    思路:

            在上述前提2的基础上,我们可以设想在HTML格式文本的基础上该如何截取文章呢?如果截取前300字,恰巧将一个HTML的标签拦腰截断岂不尴尬?

            在上述前提3的基础上,我们可以设想摘要该以怎样形式存储?

            我的思路就是,为了获取摘要,有必要先将HTML标签都剔除掉,在纯净的文字基础上去截取前面300字符(Java String的substring()方法即可)。存储的话就是同样设立一个摘要的目录,采取数据库本地读写的形式。文章实体类多加一个摘要字段,存放摘要路径。之后主页显示的是Article实体类的摘要字段(本地目录读取)即可。查看文章内容则显示Article实体类的文章内容字段(本地目录读取)即可。

           下面是除去HTML标签的公共方法(采用了复杂的正则,借鉴于网上):

        /*
         * clean all the tags of HTML
         */
        public static String removeTag(String htmlStr) {
            String regEx_script = "<script[^>]*?>[\s\S]*?<\/script>"; // script
            String regEx_style = "<style[^>]*?>[\s\S]*?<\/style>"; // style
            String regEx_html = "<[^>]+>"; // HTML tag
            String regEx_space = "\s+|	|
    |
    ";// other characters
    
            Pattern p_script = Pattern.compile(regEx_script,
                Pattern.CASE_INSENSITIVE);
            Matcher m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll("");
            Pattern p_style = Pattern
                .compile(regEx_style, Pattern.CASE_INSENSITIVE);
            Matcher m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll("");
            Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            Matcher m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll("");
            Pattern p_space = Pattern
                .compile(regEx_space, Pattern.CASE_INSENSITIVE);
            Matcher m_space = p_space.matcher(htmlStr);
            htmlStr = m_space.replaceAll(" ");
            return htmlStr;
        }
  • 相关阅读:
    【NET CORE微服务一条龙应用】第一章 网关使用与配置
    111
    test
    再来一个测试
    测试博客
    flutter 中的json解析
    关于flutter -app开发过程中的问题及解决方式总结
    使用Mybatis-plus通过自定义Sql查询只有主键为null的问题
    Centos 6中keepalived作为服务启动
    CentOS6 开放、关闭防火墙相关端口命令
  • 原文地址:https://www.cnblogs.com/rixiang/p/6055757.html
Copyright © 2011-2022 走看看