Работа с Markdown в Java: библиотеки, парсеры и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Markdown в Java: обзор библиотек и примеры использования

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 = "# Заголовок\n\nЭто **жирный** текст и *курсив*.\n\n- Пункт 1\n- Пункт 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 |\n|-----------|-----------|\n| Ячейка 1  | Ячейка 2  |";

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

Flexmark также позволяет извлекать метаданные (YAML front matter), конвертировать в LaTeX и работать с AST-деревом.

3. Pegdown (org.pegdown:pegdown)

Pegdown — одна из старейших библиотек для Markdown в Java, основанная на PEG-парсере. Она поддерживает большинство расширений Markdown Extra (аббревиатуры, определения, сноски, таблицы). Однако проект находится в режиме поддержки, и для новых проектов рекомендуется использовать CommonMark или Flexmark.

Подключение (Maven):

<dependency>
    <groupId>org.pegdown</groupId>
    <artifactId>pegdown</artifactId>
    <version>1.6.0</version>
</dependency>

Пример использования:

import org.pegdown.PegDownProcessor;

public class PegdownExample {
    public static void main(String                    

Рекомендаций