欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)點:零依賴、輕量快速

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

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

推薦用于處理復(fù)雜 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)點

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

方案對比

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

使用建議

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

復(fù)雜文檔轉(zhuǎn)換:如果需要處理表格、代碼塊、數(shù)學(xué)公式等復(fù)雜內(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)文章

  • 詳解Java8?StreamAPI中的map()方法

    詳解Java8?StreamAPI中的map()方法

    Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • 淺談Springboot實現(xiàn)攔截器的兩種方式

    淺談Springboot實現(xiàn)攔截器的兩種方式

    本文詳細的介紹了Springboot攔截器的兩種方式實現(xiàn),一種就是用攔截器,一種就是過濾器,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 關(guān)于Maven的使用,這些你都真的了解么

    關(guān)于Maven的使用,這些你都真的了解么

    這篇文章主要介紹了關(guān)于Maven的使用,這些你都真的了解么?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java?file類中renameTo方法操作實例

    Java?file類中renameTo方法操作實例

    renameTo()方法是File類的一部分,renameTo()函數(shù)用于將文件的抽象路徑名重命名為給定的路徑名??,下面這篇文章主要給大家介紹了關(guān)于Java?file類中renameTo方法操作的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程詳解

    Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程詳解

    這篇文章主要介紹了Sentinel結(jié)合Nacos實現(xiàn)數(shù)據(jù)持久化過程,要持久化的原因是因為每次啟動Sentinel都會使之前配置的規(guī)則就清空了,這樣每次都要再去設(shè)定規(guī)則顯得非常的麻煩,感興趣想要詳細了解可以參考下文
    2023-05-05
  • java中每月等額與先息后本計算

    java中每月等額與先息后本計算

    一般信用貸款會提供兩種還款方式:每月等額或者先息后本。每月等額,就是每月歸還等同的部分本金和利息,你手里在使用的本金其實是逐月減少的。先息后本就是先還利息,到期歸還本金。本文將介紹他們的實現(xiàn)方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 詳解使用Spring Security OAuth 實現(xiàn)OAuth 2.0 授權(quán)

    詳解使用Spring Security OAuth 實現(xiàn)OAuth 2.0 授權(quán)

    本篇文章主要介紹了詳解使用Spring Security OAuth 實現(xiàn)OAuth 2.0 授權(quán),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • SPRING IOC注入方式過程解析

    SPRING IOC注入方式過程解析

    這篇文章主要介紹了SPRING IOC注入方式過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java高級特性

    Java高級特性

    這篇文章主要介紹了Java高級特性,需要的朋友可以參考下
    2017-04-04
  • 泛談Java中的不可變數(shù)據(jù)結(jié)構(gòu)

    泛談Java中的不可變數(shù)據(jù)結(jié)構(gòu)

    開發(fā)人員通常認為擁有final引用,或者val在Kotlin或Scala中,足以使對象不可變。這篇博客文章深入研究了不可變引用和不可變數(shù)據(jù)結(jié)構(gòu),下面小編來和大家一起學(xué)習(xí)它
    2019-05-05

最新評論