一、前言
在内容管理系统、博客平台、在线文档等场景中,markdown 转 html 是最基础的需求之一。本文介绍如何使用 commonmark-java 库在 java 项目中实现这一功能,涵盖基础用法、扩展支持及完整示例代码。
二、为什么选择 commonmark-java?
| 特性 | 说明 |
|---|---|
| 规范兼容 | 遵循 commonmark 0.31 标准 |
| 轻量高效 | 核心仅 ~200kb,无冗余依赖 |
| 扩展丰富 | 表格、删除线、任务列表等按需加载 |
| jdk 兼容 | 支持 java 8+ |
| 活跃维护 | github 星标 2.5k+,持续更新 |
对比其他方案:
| 方案 | 优点 | 缺点 |
|---|---|---|
| commonmark-java | 轻量、标准、扩展灵活 | 部分功能需手动加载扩展 |
| flexmark-java | 功能全、内置扩展多 | 体积大、包路径版本差异大 |
| 正则表达式替换 | 无依赖 | 不可靠、边界情况多 |
本文环境:jdk 1.8 + commonmark-java 0.21.0
三、快速开始
3.1 添加依赖
maven:
<dependency> <groupid>org.commonmark</groupid> <artifactid>commonmark</artifactid> <version>0.21.0</version> </dependency>
四、完整实战:
覆盖所有 markdown 语法以下代码演示 标题、段落、列表、链接、图片、代码块、引用、表格 等完整转换:
public class markdowntohtml {
public static void main(string[] args) {
string markdown = ""
// 1. 标题
+ "# 一级标题 (h1)\n"
+ "## 二级标题 (h2)\n"
+ "### 三级标题 (h3)\n"
+ "#### 四级标题 (h4)\n"
+ "##### 五级标题 (h5)\n"
+ "###### 六级标题 (h6)\n\n"
// 2. 段落与文字格式
+ "这是普通段落。包含**粗体文字**、*斜体文字*、***粗斜体***。\n"
+ "还有~~删除线~~和`行内代码`。\n\n"
// 3. 分隔线
+ "---\n\n"
// 4. 引用块
+ "> 这是一级引用\n"
+ "> 可以有多行\n"
+ ">> 这是嵌套引用\n"
+ ">>> 三层嵌套引用\n\n"
// 5. 无序列表
+ "### 无序列表\n"
+ "- 项目 a\n"
+ "- 项目 b\n"
+ " - 子项目 b1\n"
+ " - 子项目 b2\n"
+ " - 子子项目 b2a\n"
+ " - 子子项目 b2b\n"
+ "- 项目 c\n\n"
// 6. 有序列表
+ "### 有序列表\n"
+ "1. 第一步\n"
+ "2. 第二步\n"
+ " 1. 子步骤 2.1\n"
+ " 2. 子步骤 2.2\n"
+ "3. 第三步\n\n"
// 7. 任务列表 (部分解析器支持)
+ "### 任务列表\n"
+ "- [x] 已完成任务\n"
+ "- [ ] 未完成任务\n"
+ "- [x] 另一个已完成\n\n"
// 8. 链接
+ "### 链接\n"
+ "[daydayjoyce](https://blog.csdn.net/m0_62395566?type=lately)\n"
+ "[带标题的链接](https://blog.csdn.net/m0_62395566?type=lately \"daydayjoyce\")\n"
+ "<https://blog.csdn.net/m0_62395566?type=lately>(自动链接)\n\n"
// 9. 图片
+ "### 图片\n"
+ "\n"
+ "\n\n"
// 10. 代码块
+ "### 代码块\n"
+ "```java\n"
+ "public class helloworld {\n"
+ " public static void main(string[] args) {\n"
+ " system.out.println(\"hello, markdown!\");\n"
+ " // 支持语法高亮\n"
+ " int number = 42;\n"
+ " string text = \"commonmark\";\n"
+ " }\n"
+ "}\n"
+ "```\n\n"
// 11. 表格
+ "### 表格\n"
+ "| 功能 | 描述 | 支持状态 |\n"
+ "|------|------|----------|\n"
+ "| 标题 | h1-h6 | ✅ 支持 |\n"
+ "| 列表 | 有序/无序 | ✅ 支持 |\n"
+ "| 表格 | 对齐/嵌套 | ✅ 支持 |\n"
+ "| 代码 | 语法高亮 | ✅ 支持 |\n\n"
// 12. 对齐表格
+ "### 对齐表格\n"
+ "| 左对齐 | 居中对齐 | 右对齐 |\n"
+ "|:-------|:--------:|-------:|\n"
+ "| 左 | 中 | 右 |\n"
+ "| a | b | c |\n\n"
// 13. html 内嵌
+ "### html 内嵌\n"
+ "<div style=\"color: red;\">\n"
+ " <p>这段是原始 html</p>\n"
+ "</div>\n\n"
// 14. 特殊字符与转义
+ "### 特殊字符\n"
+ "星号: \\* 井号: \\# 反斜杠: \\\\\n"
+ "html 实体: © ® ™\n\n"
// 15. 脚注 (部分支持)
+ "### 脚注\n"
+ "这是一个脚注引用[^1]\n"
+ "[^1]: 这是脚注内容\n\n"
// 16. 水平线变体
+ "***\n\n"
// 17. 复杂嵌套
+ "### 复杂嵌套示例\n"
+ "> 引用块里可以有 **粗体** 和 [链接](https://blog.csdn.net/m0_62395566?type=lately)\n"
+ "> \n"
+ "> ```\n"
+ "> 代码块在引用里\n"
+ "> ```\n"
+ "> \n"
+ "> - 列表项 1\n"
+ "> - 列表项 2\n\n"
// 18. emoji 和 unicode
+ "### emoji\n"
+ "🎉 🚀 💡 ✅ ❌ 🔥 ⭐\n\n"
// 结束
+ "---\n"
+ "**markdown 解析演示结束!** 感谢使用 *commonmark* 🎉";
parser parser = parser.builder()
.extensions(arrays.aslist(tablesextension.create()))
.build();
htmlrenderer renderer = htmlrenderer.builder()
.extensions(arrays.aslist(tablesextension.create()))
.build();
node document = parser.parse(markdown);
system.out.println(renderer.render(document));
}
}
到此这篇关于java实现markdown转html的完整示例代码的文章就介绍到这了,更多相关java实现markdown转html内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论