String.lines()方法自动识别所有标准换行符并返回Stream,支持 、 、 及Unicode行分隔符u2028/u2029,语义清晰、零配置、天然适配函数式编程。
java 11 引入的 string.lines() 方法能自动识别并按所有标准换行符(
、
、
)切分字符串,返回一个 stream<string></string>,无需手动处理不同平台的换行差异。
支持的换行符类型全兼容
该方法内部使用 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免费学习笔记(深入)”;
"a b".lines().count() // 结果是 3:["a", "", "b"]
若需忽略空行,建议显式加 .filter(Predicate.not(String::isBlank));若需保留原始结构(如解析配置文件),则无需过滤。
替代方案对比:为什么不用 split("\R")?
String.split("\R") 也能匹配通用换行符,但它返回 String[],不支持流式处理,且对结尾空字符串默认丢弃(除非传入 -1)。而 lines() 更语义清晰、零配置、天然适配函数式编程,且不会因正则引擎产生意外行为。


















