最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)將Markdown轉(zhuǎn)換為純文本

 更新時間:2025年03月17日 10:03:42   作者:Eternitysy  
這篇文章主要為大家詳細介紹了兩種在 Java 中實現(xiàn) Markdown 轉(zhuǎn)純文本的主流方法,文中的示例代碼講解詳細,大家可以根據(jù)需求選擇適合的方案

以下是兩種在 Java 中實現(xiàn) Markdown 轉(zhuǎn)純文本的主流方法,根據(jù)需求選擇適合的方案:

方法一:使用正則表達式(輕量級方案)

適用于簡單 Markdown 內(nèi)容的快速轉(zhuǎn)換

import java.util.regex.Pattern;

public class MarkdownToText {
    // 定義 Markdown 常見語法正則表達式
    private static final Pattern[] MARKDOWN_PATTERNS = {
        Pattern.compile("\\[(.*?)\\]\\(.*?\\)"),     // 鏈接 [text](url)
        Pattern.compile("!\\[.*?\\]\\(.*?\\)"),      // 圖片 ![alt](url)
        Pattern.compile("`{3,}[\\s\\S]*?`{3,}"),     // 代碼塊 ```code```
        Pattern.compile("`(.+?)`"),                 // 行內(nèi)代碼 `code`
        Pattern.compile("^[#]{1,6}\\s*"),            // 標題 # ## ###
        Pattern.compile("\\*{1,2}(.*?)\\*{1,2}"),    // 加粗/斜體 *text*
        Pattern.compile("~{2}(.*?)~{2}"),            // 刪除線 ~~text~~
        Pattern.compile("^\\s*[-*+]\\s", Pattern.MULTILINE), // 無序列表項
        Pattern.compile("^\\s*\\d+\\.\\s", Pattern.MULTILINE) // 有序列表項
    };

    public static String convertToText(String markdown) {
        if (markdown == null || markdown.isEmpty()) return "";

        // 逐步替換所有 Markdown 語法
        String text = markdown;
        for (Pattern pattern : MARKDOWN_PATTERNS) {
            text = pattern.matcher(text).replaceAll("$1");
        }

        // 處理換行和多余空格
        return text.trim()
                .replaceAll("\n{3,}", "\n\n")   // 多個空行合并為兩個
                .replaceAll(" {2,}", " ");      // 多個空格合并為一個
    }

    public static void main(String[] args) {
        String md = "# Hello World!\n" +
                "This is **bold** and *italic* text.\n" +
                "[Link](https://example.com)";

        System.out.println(convertToText(md));
        /* 輸出:
        Hello World!
        This is bold and italic text.
        Link
         */
    }
}

優(yōu)點:零依賴、輕量快速

缺點:無法處理復雜嵌套結(jié)構(gòu)

方法二:使用 Flexmark-java 庫(專業(yè)方案)

推薦用于處理復雜 Markdown 文檔

1. 添加依賴(Maven)

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

運行 HTML

2. 轉(zhuǎn)換代碼實現(xiàn)

import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ext.gfm.tables.TablesExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.data.MutableDataSet;
import org.jsoup.Jsoup;

import java.util.Arrays;

public class MarkdownToTextPro {
    public static String convert(String markdown) {
        if (markdown == null || markdown.isEmpty()) return "";

        // 配置解析器(支持表格等擴展)
        MutableDataSet options = new MutableDataSet();
        options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));

        // 構(gòu)建解析器和渲染器
        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        // 將 Markdown 解析為 HTML
        Node document = parser.parse(markdown);
        String html = renderer.render(document);

        // 使用 JSoup 去除 HTML 標簽
        return Jsoup.parse(html).text()
                .replaceAll("\\s+", " ")   // 合并多余空格
                .trim();
    }

    public static void main(String[] args) {
        String md = "| Tables   | Are           | Cool  |\n" +
                "|----------|:-------------:|------:|\n" +
                "| col 1 is | left-aligned | $1600 |\n" +
                "| col 2 is | centered      |   $12 |";

        System.out.println(convert(md));
        /* 輸出:
        Tables Are Cool col 1 is left-aligned $1600 col 2 is centered $12
         */
    }
}

優(yōu)點

  • 準確處理復雜結(jié)構(gòu)(表格、嵌套列表等)
  • 保留內(nèi)容邏輯順序
  • 支持 Markdown 擴展語法

方案對比

特性正則方案Flexmark 方案
依賴項需要引入 JAR
處理速度極快較快
語法支持基礎(chǔ)語法完整語法+擴展
代碼復雜度簡單中等
處理嵌套結(jié)構(gòu)能力有限優(yōu)秀
輸出可讀性一般優(yōu)秀

使用建議

簡單內(nèi)容處理:如果只需要處理標題、鏈接等基礎(chǔ)語法,選擇正則方案

復雜文檔轉(zhuǎn)換:如果需要處理表格、代碼塊、數(shù)學公式等復雜內(nèi)容,使用 Flexmark 方案

保留格式結(jié)構(gòu):若需要保留段落換行等格式,可調(diào)整正則方案中的換行處理邏輯

對于需要更高精度的轉(zhuǎn)換,可以結(jié)合兩種方法:先用 Flexmark 轉(zhuǎn)換,再通過正則處理特殊字符。

到此這篇關(guān)于Java實現(xiàn)將Markdown轉(zhuǎn)換為純文本的文章就介紹到這了,更多相關(guān)Java Markdown轉(zhuǎn)純文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)快速排序算法

    java實現(xiàn)快速排序算法

    快速排序算法是基于分治策略的另一個排序算法。其基本思想是:對輸入的子數(shù)組a[p:r],按以下三個步驟進行排序。 1) 分解(Divide)(2) 遞歸求解(Conquer) (3) 合并(Merge)
    2015-04-04
  • spring cloud gateway中redis一直打印重連日志問題及解決

    spring cloud gateway中redis一直打印重連日志問題及解決

    這篇文章主要介紹了spring cloud gateway中redis一直打印重連日志問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)之復雜度篇

    Java數(shù)據(jù)結(jié)構(gòu)之復雜度篇

    算法復雜度分為時間復雜度和空間復雜度。其作用:?時間復雜度是度量算法執(zhí)行的時間長短;而空間復雜度是度量算法所需存儲空間的大小
    2022-01-01
  • Mybatis實現(xiàn)批量更新數(shù)據(jù)(批量update)

    Mybatis實現(xiàn)批量更新數(shù)據(jù)(批量update)

    本文介紹了MyBatis批量更新數(shù)據(jù)的兩種方案,方案一使用foreach標簽拼接多條update語句,通過在數(shù)據(jù)庫連接URL中指定allowMultiQueries參數(shù)值為true來支持多條語句的執(zhí)行,提高效率;方案二拼接成一條SQL,但SQL語句會非常復雜且難以閱讀,不推薦使用
    2026-04-04
  • SpringBoot整合GitLab-CI實現(xiàn)持續(xù)集成的過程

    SpringBoot整合GitLab-CI實現(xiàn)持續(xù)集成的過程

    這篇文章主要介紹了SpringBoot整合GitLab-CI實現(xiàn)持續(xù)集成,本文詳細講述了 GitLab-CI 持續(xù)集成的安裝、部署、以及配置,需要的朋友可以參考下
    2022-12-12
  • 關(guān)于IDEA2020.1新建項目maven PKIX 報錯問題解決方法

    關(guān)于IDEA2020.1新建項目maven PKIX 報錯問題解決方法

    這篇文章主要介紹了關(guān)于IDEA2020.1新建項目maven PKIX 報錯問題解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Spring boot啟動原理及相關(guān)組件整理

    Spring boot啟動原理及相關(guān)組件整理

    這篇文章主要介紹了Spring boot啟動原理及相關(guān)組件整理,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • SpringBoot接收參數(shù)所有方式總結(jié)

    SpringBoot接收參數(shù)所有方式總結(jié)

    這篇文章主要介紹了SpringBoot接收參數(shù)所有方式總結(jié),文中通過代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • Java線程和操作系統(tǒng)線程的關(guān)系解讀

    Java線程和操作系統(tǒng)線程的關(guān)系解讀

    這篇文章主要介紹了Java線程和操作系統(tǒng)線程的關(guān)系解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 動態(tài)代理模擬實現(xiàn)aop的示例

    動態(tài)代理模擬實現(xiàn)aop的示例

    下面小編就為大家?guī)硪黄獎討B(tài)代理模擬實現(xiàn)aop的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望對大家有所幫助
    2017-11-11

最新評論

承德市| 乐亭县| 浦江县| 梁平县| 循化| 剑河县| 丰都县| 屏东市| 清涧县| 元朗区| 兴国县| 重庆市| 五家渠市| 秭归县| 治县。| 灌南县| 新乡县| 桃江县| 丰县| 肥东县| 成安县| 双桥区| 呼玛县| 海盐县| 雅安市| 株洲县| 宿松县| 确山县| 怀化市| 孝昌县| 黄陵县| 怀远县| 永城市| 西峡县| 甘洛县| 隆回县| 湖口县| 彰化县| 新兴县| 绵竹市| 达尔|