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
相关产品推荐
相关产品推荐

