在 Java 中使用 Markdown:库、工具与代码示例
Markdown 是一种轻量级标记语言,广泛用于文档、README 文件、论坛帖子以及博客中的文本格式化。在 Java 中,有多个强大的库可用于解析 Markdown、将其转换为 HTML、PDF 或其他格式,以及创建交互式编辑器。本文将详细介绍主要工具、它们的功能,并提供实用的代码示例。
为什么需要在 Java 中解析 Markdown?
Java 仍然是服务器端开发最流行的语言之一。将 Markdown 集成到 Java 应用程序中可以:
- 从 Markdown 文件自动生成 HTML 内容(例如,用于文档)。
- 创建支持 Markdown 的所见即所得编辑器。
- 以 Markdown 格式导入和导出数据。
- 实现用户内容的安全显示(HTML 净化)。
在 Java 中使用 Markdown 的主要库
1. commonmark-java
Java 的 CommonMark 规范官方实现。该库具有高性能、严格符合标准以及体积小的特点。它非常适合需要可靠且可预测解析的项目。
安装 (Maven):
<dependency> <groupId>org.commonmark</groupId> <artifactId>commonmark</artifactId> <version>0.21.0</version></dependency>使用示例:
import org.commonmark.node.*;import org.commonmark.parser.Parser;import org.commonmark.renderer.html.HtmlRenderer;
public class CommonMarkExample { public static void main(String[] args) { Parser parser = Parser.builder().build(); HtmlRenderer renderer = HtmlRenderer.builder().build();
String markdown = "# 标题
这是 **粗体** 文本和 *斜体*。"; Node document = parser.parse(markdown); String html = renderer.render(document);
System.out.println(html); // 输出: <h1>标题</h1> // <p>这是 <strong>粗体</strong> 文本和 <em>斜体</em>。</p> }}2. Flexmark-java
Flexmark 是一个可扩展的库,支持 CommonMark、GFM(GitHub 风格的 Markdown)以及许多额外扩展(表格、脚注、自动链接、表情符号等)。它非常适合具有非标准需求的复杂项目。
安装 (Gradle):
implementation 'com.vladsch.flexmark:flexmark-all:0.64.8'带表格扩展的示例:
import com.vladsch.flexmark.html.HtmlRenderer;import com.vladsch.flexmark.parser.Parser;import com.vladsch.flexmark.ext.tables.TablesExtension;import com.vladsch.flexmark.util.data.MutableDataSet;
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); // 输出: <table>...</table> }}3. Pegdown
Java 最古老的库之一。Pegdown 使用 PEG 解析器并支持许多扩展,但近年来在性能上不如 commonmark-java 和 flex