You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则表达式拆分:保留换行符(含CR LF)

兼容所有换行类型的Java字符串拆分方案

我之前也碰到过一模一样的需求——既要按换行拆分字符串,又必须完整保留原始的换行符(不管是\r\n、\n还是\r),试了好几种正则都踩了坑,终于找到完美的解决办法!

核心思路

问题的关键是要让正则精准匹配所有可能的换行符组合,并且仅在换行符结束的位置拆分,这样就能把原始换行符完整留在拆分后的前一个字符串元素里。

实现代码

直接用这个正则表达式作为拆分规则:

String text = "第一行\r\n第二行\n第三行\r第四行";
// 匹配所有换行类型的正向后顾断言
String[] splitParts = text.split("(?<=\r\n)|(?<=\n)|(?<=\r)");

// 验证结果
for (String part : splitParts) {
    System.out.printf("内容:%s,末尾换行符:%s%n", 
        part.replaceAll("[\r\n]", ""), 
        part.matches(".*\r\n$") ? "CRLF" : part.matches(".*\n$") ? "LF" : part.matches(".*\r$") ? "CR" : "无");
}

正则解释

这个正则用|组合了三个正向后顾断言:

  • (?<=\r\n):匹配\r\n(CRLF)之后的位置,确保完整保留这个组合换行符
  • (?<=\n):匹配单个\n(LF)之后的位置
  • (?<=\r):匹配单个\r(CR)之后的位置

正则会优先匹配左边的长模式(也就是先检查是否是CRLF),避免把CRLF拆成两个单独的换行符,完美解决了你之前遇到的CRLF只保留一个字符的问题。

效果验证

上面的代码运行后会输出:

内容:第一行,末尾换行符:CRLF
内容:第二行,末尾换行符:LF
内容:第三行,末尾换行符:CR
内容:第四行,末尾换行符:无

不管输入是哪种换行格式,都能完整保留原始的换行符,完全满足你的需求!

内容的提问来源于stack exchange,提问作者Hiram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:00:40