在 Java 中使用 Markdown:库、解析与转换

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

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

开始课程

在 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

推荐