You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何拆分含换行符的长字符串并将每行内容存入List集合

字符串按行拆分存入List的正确实现

现有代码问题

你当前写的逻辑存在几个明显bug,无法正常得到预期结果:

  • 死循环问题:while (content.contains("\n"))的循环体内从未修改过content变量的值,只要初始字符串包含换行符,循环判断条件永远为真,程序会直接卡死在循环中,无法执行到后续打印逻辑。
  • 逻辑冗余:循环内反复执行完全相同的拆分、赋值操作,没有任何实际意义,属于无效代码。
  • 兼容性差:硬编码用\n做分隔符,无法识别Windows系统常用的\r\n、老Mac系统常用的\r换行符,拆分结果可能残留多余的\r字符。
  • 集合限制:Arrays.asList返回的是固定长度的List,不支持add/remove等修改操作,后续如果要调整集合内容会抛出异常。

正确实现方案

方案1:JDK11+ 推荐写法(最鲁棒简洁)

JDK11新增的String.lines()方法会自动识别所有主流换行符,自动跳过字符串末尾的空行,直接拆分得到行流,收集为List即可:

import java.util.List;

public class LineSplitTest {
    public static void main(String[] args) {
        String content = "das,fdfd,fdsd,dsds,arer" + "\n" +
                "abv,dsds,dsa,wew,ewewew" + "\n" +
                "dfdf,wewes,mds,ojop,nsmcd";
        
        List<String> lineList = content.lines().toList();
        System.out.println(lineList);
        // 输出:[das,fdfd,fdsd,dsds,arer, abv,dsds,dsa,wew,ewewew, dfdf,wewes,mds,ojop,nsmcd]
        // 集合长度为3,完全符合预期
    }
}

方案2:JDK8 兼容写法

如果使用JDK8及更早版本,可以用正则匹配所有换行符做拆分,需要可变集合的话用ArrayList包一层:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class LineSplitTestJdk8 {
    public static void main(String[] args) {
        String content = "das,fdfd,fdsd,dsds,arer" + "\n" +
                "abv,dsds,dsa,wew,ewewew" + "\n" +
                "dfdf,wewes,mds,ojop,nsmcd";
        
        // 正则匹配 \r\n、\n、\r 三种换行符
        List<String> lineList = new ArrayList<>(Arrays.asList(content.split("\\r?\\n|\\r")));
        System.out.println(lineList);
    }
}

注意:如果不需要后续修改集合,也可以去掉外层new ArrayList<>(),直接使用Arrays.asList返回的固定长度列表,按需选择即可。

内容的提问来源于stack exchange,提问作者Ajm Kir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 21:03:57