java中拆分多行字符串应优先用split(" ")(java 8+)或lines()(java 11+),注意换行符兼容性、空行保留(需limit=-1)、首尾空白处理及bom去除。

Java中拆分多行字符串,核心是识别换行符并用split()或StringTokenizer等工具处理,但要注意不同系统换行符差异(
、
、
)以及空行、首尾空白等常见边界情况。
用split()处理多行字符串(推荐)
split()最常用,关键是正则表达式要兼容各种换行符。直接写"
"会漏掉Windows的
或旧Mac的
。
- 用
split("\R")(Java 8+):\R是Unicode换行符通配符,自动匹配、、等所有标准换行形式 - 兼容老版本可写
split("\r\n|\r|\n"),注意顺序:把\r\n放前面,避免提前截断 - 加
trim()再拆分,能避免首尾空行干扰:text.trim().split("\R")
保留空行?用split()的负数limit参数
默认split()会丢弃末尾空字符串(比如文本末尾有换行)。想保留所有行(包括空行),传-1作limit:
-
String[] lines = text.split("\R", -1);—— 空行也会作为数组元素存在 - 对比:
split("\R")(无limit)遇到连续换行时,中间空行保留,但结尾多个换行会被压缩
逐行处理?用Lines()流式操作(Java 11+)
如果不需要数组,而是遍历、过滤或转换每行,lines()更简洁安全:
立即学习“Java免费学习笔记(深入)”;
text.lines().forEach(System.out::println);- 自动跳过
null,内部已处理换行符兼容性,还支持链式操作:text.lines().filter(s -> !s.isBlank()).map(String::trim).collect(Collectors.toList()) - 注意:
lines()返回的是Stream,不缓存结果,适合一次处理;需多次访问建议先转成List
特殊场景:带BOM的UTF-8文件内容
从文件读取的多行字符串开头可能含BOM(uFEFF),导致第一行出现异常字符:
- 读取后先去除BOM:
text.startsWith("uFEFF") ? text.substring(1) : text - 或用
Files.readString(path, StandardCharsets.UTF_8)(Java 11+),它会自动忽略BOM
基本上就这些。选split("\R")最省心,Java 11起优先用lines(),处理老旧环境再考虑手动适配换行符。不复杂但容易忽略细节。










