String.lines()方法自动识别所有标准换行符并返回Stream,支持 、 、 及Unicode行分隔符u2028/u2029,语义清晰、零配置、天然适配函数式编程。
java 11 引入的 string.lines() 方法能自动识别并按所有标准换行符(
、
、
)切分字符串,返回一个 stream,无需手动处理不同平台的换行差异。
支持的换行符类型全兼容
该方法内部使用 Unicode 换行检测逻辑,能正确识别:
-
(Unix/Linux/macOS 默认) -
(Windows 常见) -
(旧版 Mac,现已少见) - 甚至包括 Unicode 行分隔符如
u2028(LINE SEPARATOR)和u2029(PARAGRAPH SEPARATOR)
基本用法:转为流后直接处理
调用后得到的是非 null 的惰性流,可链式操作:
String text = "第一行
第二行
第三行
第四行";
text.lines()
.filter(line -> !line.isBlank())
.map(String::trim)
.forEach(System.out::println);
输出四行内容,每行已去除首尾空格,且空行被跳过。
注意空白行与末尾换行的处理
lines() 不保留空行本身,但会把连续换行之间的空字符串作为独立元素返回。例如:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
"a b".lines().count() // 结果是 3:["a", "", "b"]
若需忽略空行,建议显式加 .filter(Predicate.not(String::isBlank));若需保留原始结构(如解析配置文件),则无需过滤。
替代方案对比:为什么不用 split("\R")?
String.split("\R") 也能匹配通用换行符,但它返回 String[],不支持流式处理,且对结尾空字符串默认丢弃(除非传入 -1)。而 lines() 更语义清晰、零配置、天然适配函数式编程,且不会因正则引擎产生意外行为。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










