Advertisement

博客项目实现文章摘要

阅读量:

前提:

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;
    
     }

全部评论 (0)

还没有任何评论哟~