在 Java 中使用 Markdown:库、解析器和示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Java 中使用 Markdown:库概览与使用示例



Markdown 是一种轻量级标记语言,广泛用于文档、README 文件、博客和内容管理系统中的文本格式化。在 Java 中,有多个成熟的库可用于解析 Markdown、将其转换为 HTML 以及执行反向操作。在本文中,我们将详细介绍三个最流行的库:CommonMark、Flexmark 和 Pegdown,并提供实际使用示例。



1. CommonMark (org.commonmark:commonmark)



CommonMark 是一种严格的 Markdown 标准,消除了原始规范中的歧义。commonmark-java 库是该标准的参考实现。它轻量、快速,并支持扩展(表格、删除线、自动链接)。



依赖配置 (Maven):

<dependency>    <groupId>org.commonmark</groupId>    <artifactId>commonmark</artifactId>    <version>0.21.0</version></dependency>


将 Markdown 解析为 HTML 的示例:

import org.commonmark.node.*;import org.commonmark.parser.Parser;import org.commonmark.renderer.html.HtmlRenderer;

public class CommonMarkExample { public static void main(String[] args) { String markdown = "# 标题

这是 **粗体** 文本和 *斜体*。

- 项目 1- 项目 2";

Parser parser = Parser.builder().build(); Node document = parser.parse(markdown);

HtmlRenderer renderer = HtmlRenderer.builder().build(); String html = renderer.render(document);

System.out.println(html); }}


执行结果:

<h1>标题</h1><p>这是 <strong>粗体</strong> 文本和 <em>斜体</em>。</p><ul><li>项目 1</li><li>项目 2</li></ul>


要启用扩展(例如表格),请使用:

import org.commonmark.ext.gfm.tables.TablesExtension;

Parser parser = Parser.builder() .extensions(List.of(TablesExtension.create())) .build();


2. Flexmark (com.vladsch.flexmark)



Flexmark 是一个高性能的 Markdown 库,支持众多扩展:GFM 表格、脚注、属性、排版、代码语法高亮等。它完全可定制,适用于复杂项目。



依赖配置 (Maven):

<dependency>    <groupId>com.vladsch.flexmark</groupId>    <artifactId>flexmark-all</artifactId>    <version>0.64.8</version></dependency>


将 Markdown 转换为包含表格的 HTML 的示例:

import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark.util.data.MutableDataSet;import com.vladsch.flexmark.ext.tables.TablesExtension;

import java.util.Arrays;

public class FlexmarkExample { public static void main(String[] args) { MutableDataSet options = new MutableDataSet(); options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));

Parser parser = Parser.builder(options).build(); HtmlRenderer renderer = HtmlRenderer.builder(options).build();

String markdown = "| 列 1 | 列 2 ||-----------|-----------|| 单元格 1 | 单元格 2 |";

String html = renderer.render(parser.parse(markdown)); System.out.println(html); }}


Flexmark 还可以提取元数据(YAML front matter)、转换为 LaTeX 以及处理 AST 树。



<

推荐