java使用markdown处理文本换行
在 Java 中处理 Markdown 文本换行,需结合 Markdown 的换行规则(末尾加两个空格 + 换行 或 使用
<br>标签),同时考虑文本输入输出的换行处理逻辑。以下是具体实现方法和示例:一、Markdown 换行规则回顾
- 软换行:行尾加两个空格 + 换行符(
\n),渲染后为换行但无空行。 - 硬换行:使用
<br>标签,渲染后为换行且有空行(部分解析器)。 - 段落分隔:空一行(
\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一致
}
}
四、注意事项
- 正则表达式:使用
(?<!\\n)\\n(?!\\n)匹配单个换行(非连续换行),避免误处理段落分隔。 - 平台兼容性:Windows 换行符为
\r\n,需先统一转为\n(可通过text.replaceAll("\\r\\n", "\n")处理)。 - Markdown 解析器差异:部分解析器(如 GitHub Flavored Markdown)支持单个换行直接换行,无需加空格,但通用场景建议遵循标准规则。

浙公网安备 33010602011771号