string.lines()按换行符拆分字符串为stream,识别 、 、 等,不自动过滤空行;需用filter(!line.isempty())或filter(!line.trim().isempty())跳过空行或空白行;返回懒加载、不可重用stream。

Java 中 String.lines() 方法可以直接将字符串按换行符拆分为 Stream<string></string>,它会自动识别
、
、
等常见换行符,并过滤掉空行(注意:不是跳过所有空白行,而是按行分割后保留非空字符串)。
lines() 的基本用法
调用非常简单,只需在字符串对象上调用 .lines() 即可:
String text = "apple banana cherry date"; Stream<string> stream = text.lines();</string>
该 stream 包含:"apple"、"banana"、"cherry"、"date" —— 换行符被统一处理,不保留。
注意 lines() 不保留空行但保留纯空白行?
实际上,lines() 只按换行符切分,**不会主动过滤空字符串或空白字符串**。比如:
String s = "a b "; s.lines().forEach(System.out::println);
输出是:
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
a b
即中间那个空行(两个换行符之间无字符)会产生一个空字符串 "";而 " b " 前后有空格,不是空行,也会保留。如需跳过空行或空白行,要手动加 filter:
-
.filter(line -> !line.isEmpty())→ 跳过空字符串(长度为 0) -
.filter(line -> !line.trim().isEmpty())→ 跳过纯空白行(只含空格、制表符等)
lines() 是懒加载且只能消费一次
lines() 返回的是一个**懒加载、不可重复使用的 Stream**。这意味着:
- 多次调用
.lines()没问题(每次新建 stream) - 但同一个 stream 实例不能
.count()之后再.forEach(...),会抛IllegalStateException - 适合链式操作,例如:
text.lines().map(String::trim).filter(...).collect(Collectors.toList())
对比 split("\R") 的区别
String.split("\R") 也能按 Unicode 换行符分割,返回 String[],但它:
- 返回数组,需转成 stream 才能流式处理(
Arrays.stream(str.split("\R"))) - 默认不忽略结尾空字符串(如
"a b ".split("\R")得到长度为 3 的数组,末尾是"") -
\R支持的换行符范围与lines()基本一致,但行为细节(如空行处理)需自行控制
所以日常推荐优先用 lines(),语义更清晰、API 更现代。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










