博客项目实现文章摘要

前提:

       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+|\t|\r|\n";// 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;
    }



猜你喜欢

转载自blog.csdn.net/sonnadolf/article/details/53133819
今日推荐