>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28444 个阅读者 刷新本主题
 * 贴子主题:  JAVA过滤标签实现将html内容转换为文本的方法示例 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-12-25 12:44:56     消息  查看  搜索  好友  邮件  复制  引用


/**
* 把html内容转为文本
* @param html 需要处理的html文本
* @param filterTags 需要保留的html标签样式
* @return
*/
public static String trimHtml2Txt(String html, String[] filterTags){
    html = html.replaceAll("\\<head>[\\s\\S]*?</head>(?i)", "");//去掉head
    html = html.replaceAll("\\<!--[\\s\\S]*?-->", "");//去掉注释
    html = html.replaceAll("\\<![\\s\\S]*?>", "");
    html = html.replaceAll("\\<style[^>]*>[\\s\\S]*?</style>(?i)", "");//去掉样式
    html = html.replaceAll("\\<script[^>]*>[\\s\\S]*?</script>(?i)", "");//去掉js
    html = html.replaceAll("\\<w:[^>]+>[\\s\\S]*?</w:[^>]+>(?i)", "");//去掉word标签
    html = html.replaceAll("\\<xml>[\\s\\S]*?</xml>(?i)", "");
    html = html.replaceAll("\\<html[^>]*>|<body[^>]*>|</html>|</body>(?i)", "");
    html = html.replaceAll("\\\r\n|\n|\r", " ");//去掉换行
    html = html.replaceAll("\\<br[^>]*>(?i)", "\n\r");
    List<String> tags = new ArrayList<String>();
    List<String> s_tags = new ArrayList<String>();
    List<String> halfTag = Arrays.asList(new String[]{"img","table","thead","th","tr","td"});//
    if(filterTags != null && filterTags.length > 0){
      for (String tag : filterTags) {
        tags.add("<"+tag+(halfTag.contains(tag)?"":">"));//开始标签
        if(!"img".equals(tag)) tags.add("</"+tag+">");//结束标签
        s_tags.add("#REPLACETAG"+tag+(halfTag.contains(tag)?"":"REPLACETAG#"));//尽量替换为复杂一点的标记,以免与显示文本混合,如:文本中包含#td、#table等
        if(!"img".equals(tag)) s_tags.add("#REPLACETAG/"+tag+"REPLACETAG#");
      }
    }
    html = StringUtils.replaceEach(html, tags.toArray(new String[tags.size()]), s_tags.toArray(new String[s_tags.size()]));
    html = html.replaceAll("\\</p>(?i)", "\n\r");
    html = html.replaceAll("\\<[^>]+>", "");
    html = StringUtils.replaceEach(html,s_tags.toArray(new String[s_tags.size()]),tags.toArray(new String[tags.size()]));
    html = html.replaceAll("\\ ", " ");
    return html.trim();
}


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Lambda表达式
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->使用JPA和注解
  Java网络编程-->创建非阻塞的HTTP服务器
  精通Spring-->
  Vue3开发-->组合(Composition)API
  为网站代码块pre标签增加一个复制代码按钮代码
  Java小白们的练手大餐:100道编程题面试题精讲(最新推出)
  Java函数式接口和Stream流
  NIO模式的IO多路复用底层原理
  用注解去代替if-else的技巧
  被迫重构代码,这次我干掉了 if-else
  Synchronized与ReentrantLock区别总结
  Java多线程volatile详解
  Java设计模式:备忘录模式
  Java设计模式:解释器模式
  Java 入门实用代码:设置文件只读
  Java入门实用代码:删除一个文件目录
  java实现PPT转化为PDF
  Java程序代码优化技巧
  JDBC使用8.0驱动包连接mysql设置时区serverTimezone
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。