java使用markdown处理文本换行

在 Java 中处理 Markdown 文本换行,需结合 Markdown 的换行规则(末尾加两个空格 + 换行 或 使用<br>标签),同时考虑文本输入输出的换行处理逻辑。以下是具体实现方法和示例:

一、Markdown 换行规则回顾

  1. 软换行:行尾加两个空格 + 换行符(\n),渲染后为换行但无空行。
  2. 硬换行:使用<br>标签,渲染后为换行且有空行(部分解析器)。
  3. 段落分隔:空一行(\n\n),Markdown 自动识别为新段落。

二、Java 处理 Markdown 换行的工具类

封装工具类实现文本换行转 Markdown 格式、Markdown 换行还原等功能:
java
 
运行
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Markdown文本换行处理工具类
 */
public class MarkdownLineBreakUtil {

    /**
     * 将普通文本的换行(\n)转为Markdown软换行(行尾加两个空格+换行)
     * @param plainText 普通文本
     * @return Markdown格式文本
     */
    public static String plainToMarkdownSoftBreak(String plainText) {
        if (plainText == null || plainText.isEmpty()) {
            return "";
        }
        // 替换所有\n为"  \n"(两个空格+换行)
        return plainText.replaceAll("(?<!\\n)\\n(?!\\n)", "  \n");
    }

    /**
     * 将普通文本的换行转为Markdown硬换行(<br>标签)
     * @param plainText 普通文本
     * @return Markdown格式文本
     */
    public static String plainToMarkdownHardBreak(String plainText) {
        if (plainText == null || plainText.isEmpty()) {
            return "";
        }
        return plainText.replaceAll("(?<!\\n)\\n(?!\\n)", "<br>\n");
    }

    /**
     * 还原Markdown换行为普通文本换行(移除行尾空格或<br>标签)
     * @param markdownText Markdown文本
     * @return 普通文本
     */
    public static String markdownToPlain(String markdownText) {
        if (markdownText == null || markdownText.isEmpty()) {
            return "";
        }
        // 移除行尾两个空格+换行,或替换<br>为\n
        String text = markdownText.replaceAll("  \\n", "\n");
        return text.replaceAll("<br>\\n?", "\n");
    }

    /**
     * 处理Markdown段落分隔(空一行转\n\n)
     * @param text 输入文本
     * @return 带Markdown段落分隔的文本
     */
    public static String handleParagraphBreak(String text) {
        if (text == null || text.isEmpty()) {
            return "";
        }
        // 连续两个换行视为段落分隔,保留;单个换行转为软换行
        return text.replaceAll("\\n{2,}", "\n\n")
                   .replaceAll("(?<!\\n)\\n(?!\\n)", "  \n");
    }
}
 

三、使用示例

java
 
运行
public class MarkdownLineBreakDemo {
    public static void main(String[] args) {
        // 普通文本(含换行)
        String plainText = "第一行内容\n第二行内容\n\n第三段内容\n第四行内容";
        
        // 转为Markdown软换行
        String mdSoft = MarkdownLineBreakUtil.plainToMarkdownSoftBreak(plainText);
        System.out.println("Markdown软换行:");
        System.out.println(mdSoft);
        // 输出:
        // 第一行内容  
        // 第二行内容  
        // 
        // 第三段内容  
        // 第四行内容

        // 转为Markdown硬换行
        String mdHard = MarkdownLineBreakUtil.plainToMarkdownHardBreak(plainText);
        System.out.println("\nMarkdown硬换行:");
        System.out.println(mdHard);
        // 输出:
        // 第一行内容<br>
        // 第二行内容<br>
        // 
        // 第三段内容<br>
        // 第四行内容

        // 还原为普通文本
        String plain = MarkdownLineBreakUtil.markdownToPlain(mdSoft);
        System.out.println("\n还原为普通文本:");
        System.out.println(plain);
        // 输出与原始plainText一致
    }
}
 

四、注意事项

  1. 正则表达式:使用(?<!\\n)\\n(?!\\n)匹配单个换行(非连续换行),避免误处理段落分隔。
  2. 平台兼容性:Windows 换行符为\r\n,需先统一转为\n(可通过text.replaceAll("\\r\\n", "\n")处理)。
  3. Markdown 解析器差异:部分解析器(如 GitHub Flavored Markdown)支持单个换行直接换行,无需加空格,但通用场景建议遵循标准规则。
posted @ 2025-12-03 10:35  福寿螺888  阅读(45)  评论(0)    收藏  举报