在做的项目中,经常会牵扯到,对文章的图片处理(把base64的图片保存到服务器上,并转换为服务器的图片链接),和利用h1,h2标签,去生成目录大纲,下面我写了一个工具类,使用正则表达式提取h1,h2标签,为标签赋予id属性,并提取标签内容和id的静态方法。

public class StringUtil {private String content;private String outline;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getOutline() {return outline;}public void setOutline(String outline) {this.outline = outline;}/** 生成文章大纲* wmy 15:35 2019/7/5* @Param [source, element]* @return com.raise3d.model.Article**/public static StringUtil generateOutline(String source, String element) {StringUtil article =new StringUtil();if (source != null && source.length() > 0) {List<Map<String, String>> list = new ArrayList<>();String reg = "<"+element+"([\\S\\s]*?)>" + "(.+?)</" + element + ">";Matcher m = Pattern.compile(reg).matcher(source);while (m.find()) {Map<String, String> map = new HashMap<>();String title = m.group(2);//这里我使用的id是使用MD5截取并把数字转换为英文字母String id = MD5.GetMD5Code(title).substring(14, 20);//要求id用全英文字母,html的标签id只需开头是英文字母就okfor (int i = 0; i < id.length(); i++) {if (((int) id.charAt(i)) < 65) {id = id.replace(id.charAt(i), (char) ((int) id.charAt(i) + 65));}}String table = m.group().substring(1, 3);source = source.replaceAll(m.group(), "<"+table+" id=\""+id +"\">"+title+"</"+table+">");map.put("id", id);map.put("title", title);list.add(map);}article.setContent(source);article.setOutline(JSON.toJSONString(list));} else {article.setContent(null);article.setOutline(null);}return article;}
}

测试用例:

public class Test {public static void main(String[] args) throws InterruptedException {String content = "<p>asdggasdhfh</p><h1 class=\"qqsbfw\" id=\"yqcrrx\">AAAAAAAAAAAAAAsAAAAA</h1><p>GGGGGGGGGGGGGGGGGGGGGGGGGGGGG</p><h2 class=\"tbtwra\" id=\"tbtwra\">FFFFFFFFFFFFFFFFFFFFFFFFFFFFF</h2><p>DDDDDDDDDDDDDDDDDDDDDDD</p><h1 class=\"qbyftd\" id=\"qbyftd\">SSSSSSSSSSSSSSSSSSSSSSSS</h1><p>HHHHHHHHHHHHHHHHHHHHHHHHHH</p><h2 id=\"zfeerf\" id=\"zfeerf\">JJJJJJJJJJJJJJJJJJJ</h2><p>KKKKKKKKKKKKKKKKKKKK</p><p>LLLLLLLLLLLLLLLLLLLLLL</p>";StringUtil article = StringUtil.generateOutline(content, "h[1-2]");System.out.println(article.getContent());System.out.println(article.getOutline());}
}

测试结果:

<p>asdggasdhfh</p><h1 id="yqcrrx">AAAAAAAAAAAAAAsAAAAA</h1><p>GGGGGGGGGGGGGGGGGGGGGGGGGGGGG</p><h2 id="tbtwra">FFFFFFFFFFFFFFFFFFFFFFFFFFFFF</h2><p>DDDDDDDDDDDDDDDDDDDDDDD</p><h1 id="qbyftd">SSSSSSSSSSSSSSSSSSSSSSSS</h1><p>HHHHHHHHHHHHHHHHHHHHHHHHHH</p><h2 id="zfeerf">JJJJJJJJJJJJJJJJJJJ</h2><p>KKKKKKKKKKKKKKKKKKKK</p><p>LLLLLLLLLLLLLLLLLLLLLL</p>
[{"id":"yqcrrx","title":"AAAAAAAAAAAAAAsAAAAA"},{"id":"tbtwra","title":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"id":"qbyftd","title":"SSSSSSSSSSSSSSSSSSSSSSSS"},{"id":"zfeerf","title":"JJJJJJJJJJJJJJJJJJJ"}]

转载于:https://www.cnblogs.com/mingyuan1031/p/11307326.html

用正则表达式生成文章的目录大纲相关推荐

  1. 简单的生成文章内容目录(vue可用)

    在富文本辑编器里面写文章时,我们通常会使用h1-h6标签来定义章节标题.在用户端显示时希望展示目录结构.如图: 这里生成目录结构可以借助第三方插件来实现,但某些情况下不希望引用太多的第三方资源就需要自 ...

  2. hexo嵌入html传消息的,Hexo添加Toc支持,生成文章目录

    Hexo提供了诸多插件来增强博客体验,地址http://hexo.io/plugins/. 在博客搬迁的时发现一个生成文章目录的插件,hexo-toc. hexo-toc为防插件误认标记,文章以下出现 ...

  3. 根据文章中H标签自动生成文章目录

    以前看到csdn上的目录结构就想把它移植到博客里,今天抽了个空从csdn上拔下了代码. js代码,复制放入到single.php页面中 <script type="text/javas ...

  4. 如何在 Word 中使用自定义样式生成文章目录

    如何在 Word 中使用自定义样式生成文章目录 概要 本文介绍如何在 Microsoft Word 2002 和 Microsoft Office Word 2003 中使用自定义样式创建目录.在 W ...

  5. 帝国cms怎样自动生成文章目录?

    百度蜘蛛是比较喜欢文章目录的,毕竟,带目录的文章明显条理更为清晰.而从用户的角度,查看的文章带目录也可以更快的定位到自己需要的信息. 就比如说,一篇技术文章可能会讲到前因后果,但你很着急,只需要知道解 ...

  6. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)

    <繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...

  7. 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...

    概念网络发布一款自动更新文章的工具, 该套工具可用概念的文章站程序, 概念的发布站程序, 概念的企业站程序, 只要在服务器一直开着这个工具, 工具会更具配置文件的配置, 每天定时的更新网站的文章, 文 ...

  8. Diango博客--7.自动生成文章摘要

    文章目录 0.思路引导 1.方法一:覆写 save 方法 2.方法二:使用 truncatechars 模板过滤器 0.思路引导 博客文章的模型有一个 excerpt 字段,这个字段用于存储文章的摘要 ...

  9. 自动填充html_第 11 篇:自动生成文章摘要

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 [HelloGitHub-Team 仓库](https://github.com/HelloGitHub-Team/Hello ...

  10. 个人博客网站文章添加目录导航

    文章出自个人博客https://knightyun.github.io/2020/01/14/website-add-category,转载请申明 概述 之前有写文章探索如何给个人博客网站添加文章搜索 ...

最新文章

  1. 能带曲线图绘制python_如何使用python的matplotlib模块画折线图
  2. 从VirtualBox虚拟主机访问NAT客户机的方法
  3. AVL树平衡旋转详解
  4. P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
  5. 服务器返回一个无效的JSON string,处理
  6. hdu 5783——Divide the Sequence
  7. web中间件_常见web中间件拿shell
  8. 沃尔什哈达玛变换Matlab,哈达玛变换矩阵-数字图像处理.ppt
  9. js时间格式化函数(兼容IOS)
  10. nohup命令简单的使用
  11. wifi信号衰减与距离关系_WIFI信号的空间如何衰减 WIFI信号的空间衰减介绍【详解】...
  12. Faceted project metadata file /.settings/org.eclipse.wst.common.project.facet.core.xml could
  13. 仿照中国银行页面进行编写,主要涉及到float,定位
  14. 点击图片放大缩小功能
  15. md 文件使用html阅读,使用markdow-it渲染md文件为html页面
  16. cocos2d-x 添加自定义字体---中文,英文
  17. 同济高等数学第三章之经典错误知识点笔记
  18. RHCE for RHEL6認證考試簡介
  19. python win32 excel转pdf
  20. 室内定位导航系统设计实现指南

热门文章

  1. 动态规划 钢条切割问题
  2. 我对敏捷的理解:实施敏捷的前提
  3. 一份最新的、全面的NLP文本分类综述
  4. 【论文解读】一种新的涨分神器!构造code-switching增广数据进行fine-tuning!
  5. 【论文解读】EMNLP2019-多粒度自注意力机制
  6. 深度学习15-Google涂鸦识别挑战项目(下)
  7. WannaCry只是个开始?信息时代你急需的安全书单
  8. 构建运营级IPv6网络
  9. 博文视点新书样章下载
  10. 操作系统和嵌入式开发 你愿意参加吗?